假设我有以下两个类:
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)