सेटअप
इस सवाल के लिए, मैं निम्नलिखित तीन वर्गों का उपयोग करेंगे:रेल 3 के साथ विलय स्कोप मिलती
class SolarSystem < ActiveRecord::Base
has_many :planets
scope :has_earthlike_planet, joins(:planets).merge(Planet.like_earth)
end
class Planet < ActiveRecord::Base
belongs_to :solar_system
belongs_to :planet_type
scope :like_earth, joins(:planet_type).where(:planet_types => {:life => true, :gravity => 9.8})
end
class PlanetType < ActiveRecord::Base
has_many :planets
attr_accessible :gravity, :life
end
समस्या
गुंजाइश has_earthlike_planet
काम नहीं करता।
ActiveRecord::ConfigurationError: Association named 'planet_type' was not found; perhaps you misspelled it?
प्रश्न
मुझे पता चला है कि यह है, क्योंकि यह निम्नलिखित के बराबर है: यह मुझे निम्नलिखित त्रुटि देता है
joins(:planets, :planet_type)...
और SolarSystem एक planet_type
संघ नहीं है। मैं Planet
पर has_earthlike_planet
SolarSystem
पर का उपयोग करना चाहता हूं, और कोड और शर्तों को डुप्लिकेट करना से बचाना चाहता हूं। क्या इन स्कॉप्स को मर्ज करने का कोई तरीका है जैसे मैं करने का प्रयास कर रहा हूं लेकिन मुझे एक टुकड़ा याद आ रहा है? यदि नहीं, तो इन लक्ष्यों को पूरा करने के लिए मैं अन्य तकनीकों का उपयोग कैसे कर सकता हूं?
मुझे इस मॉडल को उस मॉडल में स्थानांतरित करने का विचार पसंद है जिसे वे तर्क रखने के लिए काम करते हैं और आसानी से श्रृंखला को विलय कर देते हैं। इस सरल उदाहरण के साथ एकमात्र मुद्दा यह है कि उपलब्ध संरचना और सूचना को देखते हुए, यह अविश्वसनीय रूप से असंभव है कि एक से अधिक प्लैनेट टाइप रिकॉर्ड होगा जो 'like_earth' है। इससे बेस स्कोप जगह से बाहर निकलता है, हालांकि, यह बग ठीक होने तक यह सबसे अच्छा स्थान हो सकता है। – Aaron