Rails - Inclut-ils imbriqués dans les enregistrements actifs?

Réponses:

406

Je pense 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), vous utiliserez la syntaxe ci-dessus. Cependant, si vous souhaitez également inclure D, qui est également une association de B, c'est à ce moment que vous utiliserez le tableau comme indiqué dans l'exemple du guide Rails .

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

Vous pouvez continuer à imbriquer des inclusions comme ça (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 s'amuser, nous dirons aussi que E est associé à J et X, et que D est associé à Y.

A.includes( { bees: [ { cees: [ { ees: [:jays, :exes] }, :effs] }, { dees: :wise } ] }, :zees)
Joe Kennedy
la source
11
Comment ajouteriez-vous des conditions pour les modules inclus ..? :)
Arup Rakshit
1
comment y ajouter une commande?
Florian Widtmann
6
C'est l'une de ces réponses magiques que j'ai trouvées plusieurs fois à des années d'intervalle et qui me sauve le cul à chaque fois. Voici à quoi devraient ressembler les documents
Andrew
2
Pour faire de ce guide le plus épuisant: A.includes( { bees: { cees: {:dees, :ees} } })- pour la poupée russe comme construction (c'est-à-dire A comprend b, qui comprend c ... et ainsi de suite)
Alexander Gorg
2
pour ajouter des conditionsA.includes(bees: :cees).where(bees: { cees: { flagged: false }}).order("a.bees DESC").order("a.cees ASC")
Fabrizio Bertoglio
14

Si quelqu'un fait un respond_tobloc pour générer 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
Blaskovicz
la source
1
Je pense que vous voulez dire as_json- sinon cela rend la chaîne JSON.
Meekohi
10

Veuillez vous référer à la solution de Joe Kennedy.

Voici un exemple plus lisible (pour le futur moi).

includes(
  :product,
  :package, {
    campaign: [
      :external_records,
      { account: [:external_records] },
      { agency: [:external_records] },
      :owner,
      :partner,
    ]
  }
)
Aschyiel
la source