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
es una columna booleana extra dentro de la tabla de asociación m2m. Dadas algunas Users
ejemplo current_user
, quiero hacerAlcance con join on: has_many: a través de la asociación
current_user.meetings.visible
que recuperará una colección de Meetings
para los que el usuario es un participante en la columna de la hidden
es false
. El más cercano que he conseguido es la adición de la siguiente alcance a la clase Meetings
scope :visible, joins(:meeting_participations) & MeetingParticipation.visible
la scope
no filtrado del Meetings
contra la mesa MeetingParticipations
, sin embargo no hay es unirse a/condición contra la mesa MeetingParticipations
relacionada con current_user
.
El problema con esto es, si current_user
y another_user
son ambos participantes para algunos Meetings
ejemplo, un registro Meetings
en el conjunto de resultados serán devueltos por cada participante que se haya hidden
conjunto de false
. Si tiene current_user
true
conjunto de hidden
para todos Meetings
, si another_user
es un participante en cualquiera de esas mismas reuniones con hidden
conjunto de false
, los Meetings
aparecerá en el conjunto Meetings.visible
resultado.
¿Es posible tener un alcance como he mencionado anteriormente que se unirá correctamente en la instancia User
? Si no, ¿alguien puede recomendar una solución para esto?
Muy buena pregunta! – deivid