मुझे लगता है कि मैं इस सामग्री के साथ कई मॉडल में शामिल कर रहा हूँ एक मॉड्यूल है। यही कारण है कि लाइन हमेशा क्वेरीहमेशा बेस क्लास का उपयोग कैसे करें और रेल में एसटीआई को अनदेखा करें? जब तक मैं एसटीआई का उपयोग शुरू किया</p> <pre><code>self.class.find_by_foo(bar) </code></pre> <p>सब कुछ ठीक था:
select * from table where foo=bar"
और नहीं
select * from table where foo=bar AND type="Whatever"
वहाँ से बचने के लिए एक आसान तरीका है उत्पन्न करनी चाहिए?
मैं दो समाधानों के बावजूद। जब तक मैं ActiveRecord::Base
से पहले सर्वोच्च वर्ग खोजने या हाथ से क्वेरी चलाने वर्ग पदानुक्रम ऊपर चलना, जैसे:
self.class.find_by_sql("select * from #{self.class.table_name} where foo=bar")
मैं या तो समाधान पसंद नहीं है। क्या कोई बेहतर है?
klass = self.class
self.class.ancestors.each do |k|
if k == ActiveRecord::Base
break # we reached the bottom of this barrel
end
if k.is_a? Class
klass = k
end
end
रेल में 4 'self.class' अप्रत्याशित रूप से वस्तुओं माता पिता वर्ग,, के रूप में अपवादित, मॉडल वर्ग लौटे रेल 5' self.class' रिटर्न में। माता-पिता वर्ग प्राप्त करने के लिए 'self.class.base_class' का उपयोग किया जा सकता है। – Kris