Вы также можете сделать:

class Users < ActiveRecord::Base
  has_many :meetings, :through => :meeting_participations
  has_many :meeting_participations
end

class Meetings < ActiveRecord::Base
  has_many :users, :through => :meeting_participations
  has_many :meeting_participations
end

class MeetingParticipations < ActiveRecord::Base
  belongs_to :user
  belongs_to :meeting

  scope :hidden, where(:hidden => true)
  scope :visible, where(:hidden => false)
end

hiddenется дополнительным логическим столбцом в таблице ассоциации m2m. Учитывая некоторыеUsers экземплярcurrent_user, Я хочу делать

current_user.meetings.visible

который будет получать коллекциюMeetings для которого пользователь является участником, гдеhidden столбецfalse, Самое близкое, что я получил, это добавление следующей области кMeetings класс

scope :visible, joins(:meeting_participations) & MeetingParticipation.visible

scope фильтруетMeetings противMeetingParticipations таблицы, однако нет соединения / условия противMeetingParticipations таблица, связанная сcurrent_user.

Проблема с этим, еслиcurrent_user а такжеanother_user оба участники для некоторыхMeetings Например,Meetings запись в наборе результатов будет возвращена для каждого участника, который имеетhidden установлен вfalse, Еслиcurrent_user имеетtrue установить дляhidden для всехMeetings, еслиanother_user является участником любой из тех же Встреч сhidden установлен вfalse, теMeetings появится вMeetings.visible набор результатов.

Возможно ли иметь область, как я уже упоминал выше, которая будет правильно присоединяться кUser экземпляр? Если нет, может кто-нибудь порекомендовать решение этой проблемы?

Ответы на вопрос(8)

Ваш ответ на вопрос