如何直接return a has many object

How to return a has many object directly

我正在尝试找到一种方法 return a has many object directly instead of the parent object with the relation intact

这是我的 ProjectExternalTeam 模型,我正在寻找 return 来宾(用户集合)

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

提前致谢

您的用户模型应该与 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

看看你得到了什么。

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

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

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