如何制作ActiveRecord联接查询,该查询仅返回其中UserGroups.has_left = false的组

时间:2018-09-27 12:11:42

标签: ruby-on-rails join activerecord inner-join

一个用户有多个组认为是GroupsUser。 @groups_user.has_left = true离开小组时,我们进行了设置。因此,通过执行 @ user.groups 不可能获得用户所属的组。 因此,我开始制作联接查询,但是还没有发现。

如何设计查询,以便@ user.active_groups仅返回groups_users联接表has_left等于false的查询?

app / models / user.rb

 43   # Groups
 44   has_many :groups_users, dependent: :destroy
 45   has_many :groups, -> { distinct }, through: :groups_users
 46   scope :active_groups, ->{ joins(:groups_users)
                                .merge(GroupsUser.active_members) }

app / models / groups_user.rb

 37   scope :active_members, -> { where(has_left: false) }

1 个答案:

答案 0 :(得分:0)

问题是我没有引用#{self.id}。 这可行:

 48   def my_groups
 49     Group.joins(:groups_users)
           .where("user_id = '#{self.id}'")
           .where("has_left = false")
 50   end