CONTESTO:ambito personalizzato su has_many,: attraverso l'associazione (Rails 4)
Nel mio setup Gli utenti hanno molte comunità attraverso CommunityUser e Comunità hanno molti messaggi attraverso CommunityPost. Se segue, gli utenti hanno molti messaggi attraverso le comunità.
User.rb
has_many :community_users
has_many :communities, through: :community_users
has_many :posts, through: :communities
Ciò premesso User.rb, Calling "current_user.posts" restituisce i messaggi con una o più comunità in comune con current_user.
DOMANDA:
sto cercando di perfezionare tale associazione in modo che chiamare "current_user.posts" restituisce solo i messaggi le cui comunità sono un sottoinsieme completo delle comunità del CURRENT_USER.
Quindi, dato un utente corrente con community_ids di [1,2,3], chiamando "current_user.posts" restituirebbe solo quei post la cui matrice "community_ids" è o 1, [2], [3], [1] , 2], [1,3], [2,3] o [1,2,3].
Ho fatto ricerche portate here, ma non riesco a individuare come eseguire questa operazione con successo ...
Ciao, ci scusiamo per il ritardo! Ho pensato che questa domanda avrebbe richiesto un po 'di tempo per ottenere una risposta dal momento che richiede qualche riflessione come hai detto. Sì, sto utilizzando Rails e utilizzo dei metodi ActiveRecord per community_ids. – neon
Come lei ha ricordato che l'utente è disponibile utilizzando associazione condizionale: "has_many: i messaggi, -> (utente) {dove (" id IN()? "User.community_ids)}, attraverso:: comunità", ma in questo caso wouldn Devo anche controllare le comunità di ogni post in qualche modo? Sto solo pensando ad alta voce. – neon
Sidenote: fare "dove (" id IN() "user.community_ids?)" Come questo tornerà messaggi associati a una qualsiasi delle 'user.community_ids', piuttosto che tornare i messaggi associati con le comunità che sono un sottoinsieme completo di " user.community_ids " – neon