我正试图找到一种方法来直接返回有很多对象,而不是父对象,关系完整
这是我的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
提前致谢
答案 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答案以获取优化的数据库查询。