Rotaie: include nidificati in Record attivi?


Risposte:


406

Credo che quanto segue dovrebbe funzionare per te.

Event.includes(users: :profile)

Se vuoi includere un'associazione (la chiameremo C) di un'associazione già inclusa (la chiameremo B), utilizzeresti la sintassi sopra. Tuttavia, se si desidera includere anche D, che è anche un'associazione di B, è allora che si utilizza l'array come indicato nell'esempio nella Guida di Rails .

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

Potresti continuare a nidificare inclusioni del genere (se necessario). Supponi che A sia anche associato a Z e che C sia associato a E e F.

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

E per divertimento, diremo anche che E è associato a J e X e che D è associato a Y.

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

11
Come aggiungeresti le condizioni per i moduli inclusi ..? :)
Arup Rakshit,

1
come aggiungere un ordine lì?
Florian Widtmann,

6
Questa è una di quelle risposte magiche che ho trovato più volte a distanza di anni e mi salva il culo ogni volta. Ecco come dovrebbero apparire i documenti
Andrew,

2
Per rendere questa guida la più estenuante: A.includes( { bees: { cees: {:dees, :ees} } })- per la costruzione russa come una bambola (cioè A include b, che include c ... e così via)
Alexander Gorg

2
aggiungere condizioniA.includes(bees: :cees).where(bees: { cees: { flagged: false }}).order("a.bees DESC").order("a.cees ASC")
Fabrizio Bertoglio

14

Se qualcuno sta eseguendo un respond_toblocco per generare json nidificato, puoi fare qualcosa del tipo:

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

1
Penso che intendi as_json, altrimenti questo rende la stringa JSON.
Meekohi,

10

Si prega di fare riferimento alla soluzione di Joe Kennedy.

Ecco un esempio più leggibile (per il futuro me).

includes(
  :product,
  :package, {
    campaign: [
      :external_records,
      { account: [:external_records] },
      { agency: [:external_records] },
      :owner,
      :partner,
    ]
  }
)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.