रेल 3.2+ में, आप यह कर सकते हैंक्या has_many एसोसिएशन पर "first_or_build" विधि है? इसका मतलब है आप भी कर सकते हैं</p> <pre><code>SomeModel.some_scope.first_or_initialize </code></pre> <p>:
OtherModel.some_models.first_or_initialize
मैं इस सुंदर उपयोगी पाते हैं, लेकिन मैं पर एक first_or_build
विधि करना चाहते हैं मेरी has_many
संघों, जो first_or_initialize
की तरह काम करते हैं लेकिन भी build
के रूप में संघ के लिए एक नया रिकॉर्ड जोड़ने जब की जरूरत है। स्पष्टीकरण के लिए
अद्यतन: हाँ, मैं के बारे में first_or_initialize
और first_or_create
पता है। बात यह है कि first_or_initialize
build
के रूप में एसोसिएशन के लक्ष्य में प्रारंभिक रिकॉर्ड नहीं जोड़ता है, और first_or_create
... अच्छी तरह से ... एक रिकॉर्ड बनाता है, जो इरादा नहीं है।
class OtherModel < ActiveRecord::Base
has_many :some_models do
def first_or_build(attributes = {}, options = {}, &block)
object = first_or_initialize(attributes, options, &block)
proxy_association.add_to_target(object) if object.new_record?
object
end
end
end
मैं सिर्फ अगर आश्चर्य है: इस समस्या का
- निर्मित समाधान पहले से ही मौजूद
मैं एक समाधान है कि काम करता है, संघ एक्सटेंशन का उपयोग किया है?
- मेरी कार्यान्वयन खामियों मैं नहीं दिख रहा है?
यदि आप किसी अन्य बिंदु पर 'अन्य मॉडेल.some_models' पर उत्सुक लोडर करना चाहते हैं तो क्या होगा? मैं बजाय 'after_initialize' कॉलबैक में इस तरह के प्रारंभिक प्रदर्शन करना चाहता हूं, यह बहुत साफ दृष्टिकोण आईएमओ है। –