5

मेरे पास एक गतिविधि मॉडल है। यह है।रेल पॉलिमॉर्फिक संघों के लिए "model_type" फ़ील्ड को कैसे बनाते हैं?

क्या रेल parent.class.name, parent.model_name या parent_type फ़ील्ड को पॉप्युलेट करने के लिए कुछ और उपयोग करते हैं?

मैं चाहता हूं कि एक प्रेजेंटर उस मूल वस्तु की तरह व्यवहार करे जो इसे लपेटता है, और मुझे सही विधि को ओवरराइड करने की आवश्यकता है।

धन्यवाद।

उत्तर

6

मैं रेल 3.0.7 के साथ काम कर रहा हूँ अभी, और बहुरूपी प्रकार active_record-3.0.7/lib/active_record/association.rb में परिभाषित किया जा रहा है, लाइन 1773.

def create_belongs_to_reflection(association_id, options) 
    options.assert_valid_keys(valid_keys_for_belongs_to_association) 
    reflection = create_reflection(:belongs_to, association_id, options, self) 

    if options[:polymorphic] 
    reflection.options[:foreign_type] ||= reflection.class_name.underscore + "_type" 
    end 

    reflection 
end 

है जैसे कि यह class_name.underscore बुला रहा है और फिर "_type" जोड़कर तो यह लग रहा है । यह रेल 3.1 के लिए थोड़ा अलग हो सकता है, लेकिन यह एक अच्छी शुरुआत जगह होना चाहिए।

+2

और 'class_name' को' @class_name || = विकल्प [: class_name] के रूप में परिभाषित किया गया है || derive_class_name' अगर मुझे गलत नहीं है। 'derive_class_name'' name.to_s.camelize' है। तो मुझे लगता है कि यह सिर्फ मॉडल.नाम.to_s.camelize को कॉल कर रहा है, और मुझे 'name' विधि को ओवरराइड करना चाहिए? – Robin

+0

यह काम करना चाहिए। –

+0

यह किया :) धन्यवाद – Robin

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