2

Je le schéma suivant:Rails actif Enregistrement requête pour Double avec un joint Nested Sélectionnez Appel

Photos has many Groupes Utilisateurs has many. J'utilise ce serveur Rails en tant que backend pour une application iOS et j'ai constamment besoin d'envoyer des notifications à tous les utilisateurs concernés d'un groupe lorsqu'une photo est ajoutée.

Le problème est de trouver la requête la moins coûteuse pour résoudre seulement le User.ids affecté.

Jusqu'à présent, j'ai

Photo.find(1).groups.joins(:users) 

Je sais que je dois mettre un argument de sélection après, mais ne peut pas comprendre la syntaxe pour la vie de moi. Étant donné une photo, je suis à la recherche du moyen le plus efficace pour trouver une collection des identifiants d'utilisateur affectés.

Toute aide serait grandement appréciée !!!

+0

'Group.where (photo_id: 1) .users.collect {| u | met u.id} 'comme photo has_many groupes donc groups appartient à photo et gorups table a photo_id comme clé étrangère alors s'il vous plaît essayez ceci –

Répondre

0
users_id = [] 
Group.where(photo_id: 1).users.collect{|u| users_id << u.id} 
puts users_id 

Comme photo has_many groupes, donc, des groupes belongs_to photo et table des groupes a photo_id comme clé étrangère.

Alors, essayez ceci.

1

Dans votre modèle photo, vous pouvez avoir une autre association appelée utilisateurs

has_many :group_users, :through => :groups, :source => :users 

Ensuite, vous pouvez trouver les utilisateurs par le code suivant

@photo = Photo.includes([:group_users]).where("photos.id = ?", 1).first 
@affected_users = [] 
@photo.group_users.map {|user| @affected_users << user.id} 

Maintenant, le @affected_users contient tous les utilisateurs ids.

Questions connexes