how to autobuild an associated polymorphic activerecord object in rails 3 -


<पूर्व> वर्ग ItemSource & lt; ActiveRecord :: बेस is_to: उत्पाद,: बहुरूपता = & gt; सच अंत कक्षा RandomProduct & lt; ActiveRecord :: बेस has_one: item_source,: as = & gt; : उत्पाद,: आटोशेव = & gt; सच,: निर्भर = & gt; :

मैं क्या करना चाहता हूँ कॉल है:

  a = RandomProduct.find (1) a.item_source  

और अगर item_source पहले से मौजूद नहीं है (= निल), तो इसे स्वचालित रूप से बनाएं (build_item_source)।

पहले, मैंने इसे alias_chain_method के साथ किया था, लेकिन यह रेल 3 में समर्थित नहीं है । ओह, और मैंने भी इसका कोई फायदा नहीं उठाया:

  वर्ग RandomProduct & lt; ActiveRecord :: बेस has_one: item_source,: as = & gt; : उत्पाद,: आटोशेव = & gt; सच,: निर्भर = & gt; : मॉड्यूल को नष्ट करें ऑटोबॉइल्ड आईटम्स स्रोत डीआरएफ़ मद_सोर्स सुपर || Build_item_source समाप्ति अंत में AutoBuildItemSource अंत  

रेल 3 में, alias_method_chain (और alias_method , और alias ) ठीक काम करता है:

  वर्ग उपयोगकर्ता & lt; ActiveRecord :: बेस है_ऑन: प्रोफ़ाइल,: inverse_of = & gt; : उपयोगकर्ता # यह काम करता है: # # डीएफ़ प्रोफाइल_वि_बिल्ड # प्रोफाइल_विंडोबाइल || Build_profile # end # alias_method_chain: प्रोफाइल,: build # # लेकिन ऐसा करता है: उपनाम profile_without_build प्रोफ़ाइल डीएफ़ प्रोफाइल profile_without_build || Build_profile एंड एंड  

लेकिन हमेशा एक विकल्प के रूप में accept_nested_attributes_for है, जो कॉल करता है जब प्रोफाइल_एडिटर्स सेट होते हैं। इसे प्रतिनिधि (वैकल्पिक) से मिलाएं और आपको चिंता करने की आवश्यकता नहीं होगी कि क्या रिकॉर्ड मौजूद है या नहीं:

  वर्ग उपयोगकर्ता & lt; ActiveRecord :: बेस है_ऑन: प्रोफ़ाइल,: inverse_of = & gt; : उपयोगकर्ता प्रतिनिधि: वेबसाइट,: to = & gt; : प्रोफ़ाइल,: allow_nil = & gt; सच स्वीकृत_नैस्टेड_एटी के लिए_ प्रोफ़ाइल: प्रोफ़ाइल अंत User.new.profile # = & gt; शून्य उपयोगकर्ता। New.website # = & gt; शून्य = यूज़र। न्यू: प्रोफाइल_एडिटर्स = & gt; {: वेबसाइट = & gt; "Http://example.com"} यू.प्रोफ़ाइल # = & gt; # & Lt; प्रोफ़ाइल आईडी: शून्य, user_id: शून्य, वेबसाइट: "http://example.com" ... & gt;  

यदि संघ हमेशा बना है, तो प्रतिनिधिमंडल आवश्यक नहीं है (लेकिन उपयोगी हो सकता है, किसी भी तरह)।

(नोट: मैं : inverse_of < / Code> बनाने के लिए प्रोफ़ाइल। Validates_presence_of: उपयोगकर्ता काम और आम तौर पर प्रश्नों को सहेजने के लिए।)


Comments