2017-09-20 1 views
0

J'ai un User modèle qui a beaucoup Contact et Contact appartient à User. Je suis en train de récupérer contacts d'utilisateur sélectionné, qui peut être fait en suivant:Rails associé modèle de tableaux d'objets

id = [1,2,3,4,5] 
users = User.includes(:contacts).find(id) 

contacts = [] 

users.each do |user| 
    contacts << user.contacts.as_json 
end 

render json: contacts 

Y at-il une meilleure façon d'obtenir contacts de users tableaux. En second lieu, comment charger uniquement les contacts en se joignant à gauche sur ids utilisateur et non les colonnes entières d'utilisateurs d'enregistrer l'utilisation de la mémoire, (autre que #select(:id) approche)

Répondre

2

Vous avez juste besoin contacts et render, comme vous n'avez pas l'utilisation de User pourquoi pas:

contacts = Contact.where(user_id: user_ids) 

user_ids = [1, 2, 3, 4, 5].

+0

31 caractères de moins. Nettoyer. Pas de rendu json supplémentaire. Bon produit! – jvillian

2

Vous pouvez obtenir tous les utilisateurs qui passent le tableau de ids, comme:

ids = [1,2,3,4,5] 
users = User.includes(:contacts).where(users: { id: ids }) 

Mais si vous voulez que les contacts, vous pouvez interroger la table de contact, en utilisant la relation avec la table utilisateur, et en passant aussi le tableau de ids, comme

Contact.joins(:user).where(users: { id: [1,2,3,4,5] }) 

et puis pour obtenir sa JSON format, puis utilisez as_json, donc:

@contacts = Contact.joins(:user).where(users: { id: [1,2,3,4,5] }).as_json 
render json: @contacts 
+0

Je pense que l'utilisation de as_json est préférable à l'utilisation de to_json. –

+0

Vous avez raison, merci @MoustafaSallam. –