2012-02-19 9 views
22

मैं इस जैसे दो संबंधित मॉडल:एक और दायरे में एक संबंधित मॉडल से एक दायरे का उपयोग करने

class PartCategory < ActiveRecord::Base 
    has_many :part_types 
    scope :engine, where(:name => 'Engine') 
end 

class PartType < ActiveRecord::Base 
    belongs_to :part_category 
end 

मैं इस तरह के रूप PartType मॉडल के लिए एक गुंजाइश जोड़ना चाहते हैं:

scope :engine_parts, lambda { joins(:part_category).engine } 

लेकिन जब मैं कोशिश करता हूं, तो मुझे निम्न त्रुटि मिलती है:

NoMethodError: अपरिभाषित विधि 'default_scoped?' ActiveRecord :: बेस के लिए: कक्षा

मुझे दायरे की चीज़ के साथ बहुत अधिक अनुभव नहीं है, इसलिए शायद मुझे यहां कुछ मौलिक याद आ रही है। क्या कोई मुझे बता सकता है कि यह क्या है।

उत्तर

41

इस प्रयास करें:

scope :engine_parts, lambda { joins(:part_category).merge(PartCategory.engine) } 

असल में, joins(:part_category) का परिणाम है, दो मॉडल के शामिल होने है, तो आप उस पर .engine सीधे कॉल नहीं कर सकते हैं, तो आप इस तरीके से स्कोप की रचना करने की जरूरत है।

Here for more

+0

बहुत बहुत धन्यवाद! वह जवाब था। – bappelt

+4

'&' का उपयोग करके बहिष्कृत किया गया है। इसके बजाय 'मर्ज()' का उपयोग करें। [यहां] देखें (http://stackoverflow.com/questions/7660867/why-using-merge-method-with-scopes-isnt-working-anymore-on-rails-3-1) और [यहां] (https: //github.com/rails/rails/commit/66003f596452aba927312c4218dfc8d408166d54) –

+0

'विलय() ने किया! धन्यवाद! – yorch

संबंधित मुद्दे