एसोसिएशन का उपयोग कर रेल क्वेरी - has_many - रूबी-ऑन-रेल, activerecord

अगर मेरे पास एक मॉडल है जिसे उपयोगकर्ता कहा जाता है:

  has_many     :parent_relationships,
:class_name            => "Relationship",
:foreign_key           => :child_id,
:dependent             => :destroy,
:uniq => true
has_many     :parents,
:through               => :parent_relationships,
:source                => :parent

इसलिए, मैं उन उपयोगकर्ताओं को ढूंढना चाहता हूं जिनके पास कम से कम एक माता-पिता हैं। अभी, अगर मैं एक विशेष उपयोगकर्ता प्राप्त करता हूं और मैं करता हूं user.parents, मुझे माता-पिता की सूची मिल गई है, लेकिन मैं ऐसा कैसे करूंगा जहां एक खंड में है?

मेरी चिंता यह है कि अभी मैं इस तरह से ला रहा हूं:

User.where({:role => "Teen"})

इसलिए, मैं उन सभी उपयोगकर्ताओं को खोजना चाहता हूं जिनकी भूमिका एक किशोर है और जिनके पास कम से कम माता-पिता हैं। इसके अलावा, और इसे और अधिक जटिल बनाने के लिए, मेरे पास एक और एसोसिएशन है जिसे मैं ध्यान में रखना चाहूंगा:

 has_and_belongs_to_many :notifications

और मैं उन उपयोगकर्ताओं को खोजना चाहूंगा जिनके पास एक अधिसूचना है जिसका नाम विशेषता "ईमेल" है।

धन्यवाद

उत्तर:

जवाब के लिए 0 № 1

एक जुड़ाव यह करना चाहिए:

User.joins(:parents).uniq

चूंकि यह एक बनाता है INNER JOIN, यह केवल माता-पिता के साथ रिकॉर्ड लौटाएगा। uniq डुप्लिकेट रिकॉर्ड को निकालता है जो जुड़ने से वापस आ सकता है।

संपादित करें:

आपका तरीका इस प्रकार काम कर सकता है:

User.includes(:notifications).joins(:parents).where(:role => "Teen").where("notifications.name = "email"")

संबंधित सवाल
सबसे लोकप्रिय