首页 > 解决方案 > 如何制作仅返回 UserGroups.has_left = false 的组的 ActiveRecord 连接查询

问题描述

一个用户 has_many groups 认为是 GroupsUser。我们@groups_user.has_left = true在他离开小组时设置。因此,无法通过@user.groups获取用户所属的组。所以我开始制作一个连接查询,但我还没有搞定它。

如何制作我的查询,以便@user.active_groups 只返回groups_users 加入表has_left 等于false 的那些?

应用程序/模型/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) }

应用程序/模型/groups_user.rb

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

标签: ruby-on-railsjoinactiverecordinner-join

解决方案


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

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

推荐阅读