Как создать запрос на соединение ActiveRecord, который возвращает только группы, в которых UserGroups.has_left = false - PullRequest
0 голосов
/ 27 сентября 2018

Пользователь has_many группирует мысли 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 голосов
/ 27 сентября 2018

Проблема была в том, что я не цитировал #{self.id}.Это сработало:

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