रेल्स - नेस्टेड में सक्रिय रिकॉर्ड शामिल हैं?


166

मेरे पास उन घटनाओं की एक सूची है जो मुझे मिलती है। मैं इस घटना से जुड़े प्रत्येक उपयोगकर्ता और प्रत्येक उपयोगकर्ता से जुड़ी प्रत्येक प्रोफ़ाइल को शामिल करने का प्रयास कर रहा हूं। उपयोगकर्ताओं को शामिल किया गया है, लेकिन उनके प्रोफाइल नहीं।

यह मैं कैसे करूंगा

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

डॉक्स स्पष्ट प्रतीत नहीं होते हैं: http://guides.rubyonrails.org/active_record_querying.html

जवाबों:


406

मेरा मानना ​​है कि निम्नलिखित को आपके लिए काम करना चाहिए।

Event.includes(users: :profile)

यदि आप पहले से शामिल एसोसिएशन (हम इसे बी कहेंगे) को एसोसिएशन (हम इसे C कहेंगे) शामिल करना चाहते हैं, तो आप ऊपर दिए गए सिंटैक्स का उपयोग करेंगे। हालाँकि, यदि आप डी को भी शामिल करना चाहते हैं, जो कि बी का एक संघ भी है, तो यह है कि जब आप रेल गाइड में उदाहरण में दिए गए सरणी का उपयोग करेंगे ।

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

आप घोंसले को जारी रख सकते हैं जैसे कि (यदि आपको वास्तव में आवश्यकता है)। यह कहें कि A, Z से भी जुड़ा है और वह C, E और F से जुड़ा है।

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

और अच्छे मनोरंजन के लिए, हम यह भी कहेंगे कि E, J और X से जुड़ा है, और यह कि D, Y से जुड़ा है।

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

11
आप इसमें शामिल मॉड्यूल के लिए शर्तें कैसे जोड़ेंगे ..? :)
अरूप रक्षित

1
कैसे एक आदेश जोड़ने के लिए?
फ्लोरियन विडमैन

6
यह उन जादुई जवाबों में से एक है जो मैंने कई बार वर्षों से अलग-अलग पाए हैं और हर बार अपनी गांड को बचाता है। डॉक्स को यह दिखना चाहिए
एंड्रयू

2
इस गाइड को सबसे थकाऊ बनाने के A.includes( { bees: { cees: {:dees, :ees} } })लिए : - रूसी गुड़िया के लिए निर्माण की तरह (यानी ए में बी भी शामिल है, जिसमें सी ... और इतने पर शामिल हैं)
अलेक्जेंडर गोर्ग

2
शर्तों को जोड़ने के लिएA.includes(bees: :cees).where(bees: { cees: { flagged: false }}).order("a.bees DESC").order("a.cees ASC")
Fabrizio Bertoglio

14

यदि कोई respond_toनेस्टेड जोंस उत्पन्न करने के लिए ब्लॉक कर रहा है , तो आप कुछ ऐसा कर सकते हैं:

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

1
मुझे लगता है कि आपका मतलब है as_json- अन्यथा यह JSON स्ट्रिंग प्रदान करता है।
मियोकी

10

कृपया जो कैनेडी के समाधान को देखें।

यहाँ एक और पठनीय उदाहरण है (भविष्य के लिए)।

includes(
  :product,
  :package, {
    campaign: [
      :external_records,
      { account: [:external_records] },
      { agency: [:external_records] },
      :owner,
      :partner,
    ]
  }
)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.