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 для hidden для всех Meetings, если another_user является участником любого из тех же совещаний с hidden, установленным на false, те Meetings появятся в Meetings.visible набор результатов.
Возможно ли иметь область видимости, как я уже упоминал выше, которая будет правильно присоединяться к экземпляру User? Если нет, может кто-то порекомендовать решение?