वर्ग 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
Post a Comment