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
est une colonne booléenne supplémentaire dans la table d'association m2m. Étant donné que certains Users
instance current_user
Je veux faire
current_user.meetings.visible
qui récupérera une collection de Meetings
pour lequel l'utilisateur est un participant où le hidden
La colonne est false
. Le résultat le plus proche que j'ai obtenu est l'ajout du champ d'application suivant à l'élément Meetings
classe
scope :visible, joins(:meeting_participations) & MeetingParticipation.visible
En scope
filtre les Meetings
contre la MeetingParticipations
mais il n'y a pas de jointure/condition par rapport à la table MeetingParticipations
tableau relatif à current_user
.
Le problème est que si current_user
y another_user
sont tous deux participants pour certains Meetings
une instance Meetings
dans l'ensemble des résultats sera renvoyée pour chaque participant qui a hidden
fixé à false
. Si current_user
a true
fixé pour hidden
pour tous Meetings
si another_user
participe à l'une ou l'autre de ces mêmes réunions avec hidden
fixé à false
, ces Meetings
apparaîtra dans le Meetings.visible
l'ensemble des résultats.
Est-il possible d'avoir un champ d'application, comme je l'ai mentionné ci-dessus, qui se joindrait correctement au champ d'application User
instance ? Si ce n'est pas le cas, quelqu'un peut-il me recommander une solution ?