9

मेरे पास एक टेबल Foo है जिसमें bar नामक एक पॉलिमॉर्फिक संबंधित है। foos तालिका में मानक bar_id कॉलम है। हालांकि, एक स्ट्रिंग-आधारित bar_type कॉलम के बजाय, मेरे पास एक पूर्णांक bar_type_id कॉलम है। यह कॉलम bar_types तालिका में id कॉलम का संदर्भ देता है। bar_types.name उस वर्ग का नाम रखता है जो विशेष bar उदाहरण की कक्षा का प्रतिनिधित्व करता है।इंटीजर आईडी प्रकार फ़ील्ड्स का उपयोग कर पॉलिमॉर्फिक असाइनमेंट

क्या रेल (आदर्श> = 2.3.10) इस प्रकार के पॉलीमोर्फिक एसोसिएशन के लिए अनुमति देता है?

+2

के रूप में यह standart बहुरूपी संघ आप खुद ही यह लिखना चाहिए नहीं है उदाहरण के लिए, मानचित्रण कॉन्फ़िगर करने के बाद, आप से बदल जाते हैं। – fl00r

उत्तर

10

हम इसे अधिभावी द्वारा किया एक नए मॉड्यूल में association_class विधि और :extend विकल्प का उपयोग करके इसे शामिल किया गया। चीजों को आसान बनाने के लिए स्ट्रिंग मैपिंग हैश के लिए एक पूर्णांक भी बनाया।

config/initializers निर्देशिका में या कहीं भी आप की तरह, एक फ़ाइल हैश INT_OBJECT_TYPE_TO_CLASSNAME = { 0 => "Project", 1 => "Task", 2 => "Timesheet" }

class CommentObjectType < ActiveRecord::Base 
    module ClassNamesAsInt 
    def association_class 
     return INT_OBJECT_TYPE_TO_CLASSNAME[restricted_object_type].constantize 
    end 
    end 
end 

comments.rb में

belongs_to :commentable, :polymorphic => true, :extend => CommentObjectType::ClassNamesAsInt 
0

इसके लिए दो दृष्टिकोण हैं।

प्रथम आसान है:

has_many :bars, :conditions => "whatever you want" 

दूसरा मुश्किल हो सकता है:

set_inheritance_column :bar_type_id 
0

मुझे यकीन है कि नहीं हूँ, लेकिन आप खेल सकते हैं चारों ओर

belongs_to :bar, :class_name => proc{ BarType.find(self.bar_type_id).name }, :foreign_key => :bar_id 
2

मैं polymorphic integer type मणि का इस्तेमाल कर रही हूँ, लिखा बना सकते हैं और परिभाषित मेरे सहकर्मियों में से एक द्वारा। मेरी राय में ऊपर दिए गए उदाहरणों की तुलना में उपयोग करना थोड़ा आसान है।

belongs_to :actor,    polymorphic: true 

नए स्वरूप में:: जहाँ तक

belongs_to :actor,    polymorphic: true, integer_type: true 
संबंधित मुद्दे