过滤渴望加载的has_many关联

时间:2016-12-28 13:02:51

标签: ruby-on-rails activerecord

假设我有以下两个类:

class Group
  has_many :actions
end

class Action
  belongs_to :group
  belongs_to :user
end

我想用他们的动作检索所有组,即:

Group.includes(:actions)

但是我希望通过当前用户的user_id过滤加载的操作,因此在迭代'actions'关联时,只会返回用户的操作。

我可以添加另一个关联,如下:

has_many :current_user_actions, -> {where(user_id: User.current_user.id)}, class_name: 'Action'

但是前面提到的Group查询提供了一个迭代'actions'(而不是'current_user_actions')关联的视图,因此该选项被排除了。

下面建议的以下查询将起作用,除了where子句过滤掉没有操作的组:

Group.includes(:actions).where('actions.user_id = ?', User.current_user.id).references(:actions)

0 个答案:

没有答案