web-dev-qa-db-fra.com

Rails - Nested inclut sur Active Records?

J'ai une liste d'événements que je vais chercher. J'essaie d'inclure chaque utilisateur associé à cet événement et chaque profil associé à chaque utilisateur. Les utilisateurs sont inclus mais pas leurs profils.

Comment pourrais-je faire cela

Event.includes(:users [{profile:}])

La documentation ne semble pas claire: http://guides.rubyonrails.org/active_record_querying.html

150
aryaxt

Je crois que ce qui suit devrait fonctionner pour vous.

Event.includes(users: :profile)

Si vous souhaitez inclure une association (nous l'appellerons C) d'une association déjà incluse (nous l'appellerons B), utilisez la syntaxe ci-dessus. Toutefois, si vous souhaitez également inclure D, qui est également une association de B, vous devez alors utiliser le tableau comme indiqué dans l'exemple du Guide Rails .

A.includes(bees: [:cees, :dees])

Vous pouvez continuer à inclure des objets comme celui-ci (si vous en avez réellement besoin). Disons que A est également associé à Z et que C est associé à E et F.

A.includes( { bees: [ { cees: [:ees, :effs] }, :dees] }, :zees)

Et pour le plaisir, nous dirons également que E est associé à J et X, et que D est associé à Y.

A.includes( { bees: [ { cees: [ { ees: [:jays, :exes] }, :effs] }, { dees: :wise } ] }, :zees)
369
Joe Kennedy

Si quelqu'un utilise un bloc respond_to pour générer un JSON imbriqué, vous pouvez faire quelque chose comme:

respond_to do |f|
  f.json do
    render json: event.to_json(include: {users: {include: :profile} }), status: :ok
  end
end
13
Blaskovicz

Veuillez vous reporter à la solution de Joe Kennedy.

Voici un exemple plus lisible (pour moi futur).

includes(
  :product,
  :package, {
    campaign: [
      :external_records,
      { account: [:external_records] },
      { agency: [:external_records] },
      :owner,
      :partner,
    ]
  }
)
1
aschyiel