अपनी पहली पंक्ति में, आप सफलतापूर्वक एक ActiveRecordRelation
. लौटा रहे हैं @alarmsT
. में ऑब्जेक्ट करें
# Extracts those alarms that are ACTIVE and have something in common with the tittles
@alarmsT = Alarm.activated.where("keyword in (?)", [@header.title_es, @header.title_en, @header.title_en])
इस बिंदु पर आप अतिरिक्त .where(...)
. लागू कर सकते हैं @alarmsT
. पर तरीके, शर्तें या दायरा एआरएल एक्सप्रेशन को और बेहतर बनाने के लिए और परिणाम लौटाए गए।
हालांकि, फिर आप @alarmsT
. को कनवर्ट करते हुए इस संबंध पर एक फ़िल्टर चलाते हैं सरणी
. के उदाहरण के लिए
# Extracts alarms when Header has at least the same categories as an alarm
@alarmsT = @alarmsT.select do |alarm|
@header.category_ids.all?{|c| alarm.category_ids.include? c }
end
Array
. के बाद से अब आप ARel एक्सप्रेशन नहीं बना सकते हैं आपके ARel के .where(...)
. के बारे में नहीं जानता विधि, या आपका कोई अलार्म
मॉडल के दायरे या गुण। यही कारण है कि नीचे दिए गए कोड में आपको #अपरिभाषित विधि 'कहां' मिल रही है त्रुटि -- आप कॉल कर रहे हैं
.where()
सरणी
. के उदाहरण पर; एक विधि जो मौजूद नहीं है।
@alarmsF = []
@header.events.each do |e|
@alarmsF = @alarmsF + @alarmsT.where("alarms.location LIKE ?", e.town)
end
आप श्रेणी आईडी द्वारा फ़िल्टर करने के लिए चयन न करके और इसके बजाय एक जॉइन का उपयोग करके इसे ठीक कर सकते हैं। इस तरह के जुड़ाव का निर्माण (संबंधित तालिका/स्तंभ में मूल्यों के कम से कम एक सबसेट के अस्तित्व को सत्यापित करने के लिए) Google और यहां StackOverflow पर आसानी से पाए जाने वाले स्थानों पर काफी कुछ प्रलेखित है।