Rails - Nested termasuk pada Rekaman Aktif?


Jawaban:


406

Saya percaya yang berikut ini akan berhasil untuk Anda.

Event.includes(users: :profile)

Jika Anda ingin menyertakan asosiasi (kami akan menyebutnya C) dari asosiasi yang sudah disertakan (kami akan menyebutnya B), Anda akan menggunakan sintaksis di atas. Namun, jika Anda ingin memasukkan D juga, yang juga merupakan asosiasi B, saat itulah Anda akan menggunakan array seperti yang diberikan dalam contoh dalam Panduan Rails .

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

Anda dapat terus memasukkan sarang seperti itu (jika Anda benar-benar perlu). Katakan bahwa A juga dikaitkan dengan Z, dan bahwa C dikaitkan dengan E dan F.

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

Dan untuk bersenang-senang, kami juga akan mengatakan bahwa E dikaitkan dengan J dan X, dan bahwa D dikaitkan dengan Y.

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

11
Bagaimana Anda menambahkan kondisi untuk modul yang disertakan ..? :)
Arup Rakshit

1
bagaimana cara menambahkan pesanan?
Florian Widtmann

6
Ini adalah salah satu jawaban ajaib yang telah saya temukan beberapa kali bertahun-tahun terpisah dan menyelamatkan pantat saya setiap kali. Seperti inilah seharusnya dokumen itu
Andrew

2
Untuk membuat panduan ini yang paling melelahkan: A.includes( { bees: { cees: {:dees, :ees} } })- untuk boneka Rusia seperti konstruksi (yaitu A termasuk b, yang mencakup c ... dan seterusnya)
Alexander Gorg

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

14

Jika ada yang melakukan respond_toblok untuk menghasilkan nested json, Anda dapat melakukan sesuatu seperti:

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

1
Saya pikir maksud Anda as_json- jika tidak, ini membuat string JSON.
Meekohi

10

Silakan merujuk ke solusi Joe Kennedy.

Inilah contoh yang lebih mudah dibaca (untuk saya di masa mendatang).

includes(
  :product,
  :package, {
    campaign: [
      :external_records,
      { account: [:external_records] },
      { agency: [:external_records] },
      :owner,
      :partner,
    ]
  }
)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.