如何直接返回一个有很多对象

时间:2015-07-27 00:24:05

标签: ruby-on-rails activerecord has-many

我正试图找到一种方法来直接返回有很多对象,而不是父对象,关系完整

这是我的ProjectExternalTeam模型,我希望直接返回来宾(用户集合)

class ProjectExternalTeam < ActiveRecord::Base
  belongs_to :project
  belongs_to :guest, class_name: 'User', foreign_key: 'member_id'
  belongs_to :owner, class_name: 'User', foreign_key:'invited_by_id'
end

现在我正在使用像

这样的东西
gus = []
gg = ProjectExternalTeam.where(account_id:1)
gg.each do |g| gus.push(g.guest) end

这个gus最终会成为一个用户集合。我觉得必须有一些更简单的方法来做这件事,比如

gus = ProjectExternalTeam.where(account_id:1).guests

提前致谢

2 个答案:

答案 0 :(得分:1)

您的用户模型应该与ProjectExternalTeam具有has_many / has_one关系。因此,您希望使用ProjectExternalTeam提取用户并加入查询。类似的东西:

User.joins(:project_external_teams).where(“project_external_teams.account_id =?”,1)[可选...其余条件由member_id]

如果你最后需要一个数组,只需添加.to_a。

所以,首先尝试:

User.joins(:project_external_teams).where(“project_external_teams.account_id =?”,1).to_a

看看你得到了什么。

答案 1 :(得分:1)

您想要map。使用&:method语法(xxx.map do {|sth| sth.method}的快捷方式),这将给出

gus = ProjectExternalTeam.where(account_id: 1).map(&:guest)

但是,请参阅@Gen答案以获取优化的数据库查询。