Raylar - Yuvalanmış Aktif Kayıtlar içerir mi?


Yanıtlar:


406

Aşağıdakilerin sizin için çalışması gerektiğine inanıyorum.

Event.includes(users: :profile)

Zaten dahil edilmiş bir ilişkilendirmenin ilişkilendirmesini (buna C olarak adlandırırız) eklemek isterseniz (biz buna B adını veririz), yukarıdaki sözdizimini kullanırsınız. Bununla birlikte, aynı zamanda B'nin bir ilişkisi olan D'yi de eklemek isterseniz, o zaman diziyi Raylar Kılavuzu'ndaki örnekte verildiği gibi kullanırsınız .

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

Bu tür içerikleri iç içe yerleştirmeye devam edebilirsiniz (gerçekten ihtiyacınız varsa). A'nın Z ile ilişkili olduğunu ve C'nin E ve F ile ilişkili olduğunu varsayalım.

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

İyi eğlenceler için, E'nin J ve X ile ilişkili olduğunu ve D'nin Y ile ilişkili olduğunu söyleyeceğiz.

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

11
Dahil olan modüller için koşulları nasıl eklersiniz? :)
Arup Rakshit

1
sipariş nasıl eklenir?
Florian Widtmann

6
Yıllarca defalarca bulduğum ve her seferinde kıçımı kurtaran büyülü cevaplardan biri bu. Dokümanlar böyle görünmeli
Andrew

2
Bu kılavuzu en yorucu hale getirmek A.includes( { bees: { cees: {:dees, :ees} } })için : - inşaat gibi Rus bebek için (yani A, c ... vb.
İçeren

2
koşulları eklemek içinA.includes(bees: :cees).where(bees: { cees: { flagged: false }}).order("a.bees DESC").order("a.cees ASC")
Fabrizio Bertoglio

14

Herkes respond_toiç içe json oluşturmak için bir blok yapıyorsa, şöyle bir şey yapabilirsiniz:

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

1
Demek istediğini düşünüyorum as_json- aksi takdirde bu JSON dizesini oluşturur.
Meekohi

10

Lütfen Joe Kennedy'nin çözümüne bakın.

İşte daha okunabilir bir örnek (gelecekteki benim için).

includes(
  :product,
  :package, {
    campaign: [
      :external_records,
      { account: [:external_records] },
      { agency: [:external_records] },
      :owner,
      :partner,
    ]
  }
)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.