आप डॉक्स को थोड़ा गलत बता रहे हैं। क्लाइंट संग्रह से some_firm.client.new
एक नई Client
ऑब्जेक्ट बना रहा है , और इसलिए यह स्वचालित रूप से सेट कर सकता firm_id
हैsome_firm.id
, जबकि डॉक्स कॉल कर रहे हैं, Client.new
जिसमें किसी भी फर्म की आईडी का कोई भी ज्ञान नहीं है, इसलिए इसे firm_id
पारित करने की आवश्यकता है।
के बीच एकमात्र अंतर some_firm.clients.new
और some_firm.clients.build
ऐसा लगता है कि build
नव-निर्मित क्लाइंट को भी जोड़ता हैclients
संग्रह :
henrym:~/testapp$ rails c
Loading development environment (Rails 3.0.4)
r:001 > (some_firm = Firm.new).save # Create and save a new Firm
#=> true
r:002 > some_firm.clients # No clients yet
#=> []
r:003 > some_firm.clients.new # Create a new client
#=> #<Client id: nil, firm_id: 1, created_at: nil, updated_at: nil>
r:004 > some_firm.clients # Still no clients
#=> []
r:005 > some_firm.clients.build # Create a new client with build
#=> #<Client id: nil, firm_id: 1, created_at: nil, updated_at: nil>
r:006 > some_firm.clients # New client is added to clients
#=> [#<Client id: nil, firm_id: 1, created_at: nil, updated_at: nil>]
r:007 > some_firm.save
#=> true
r:008 > some_firm.clients # Saving firm also saves the attached client
#=> [#<Client id: 1, firm_id: 1, created_at: "2011-02-11 00:18:47",
updated_at: "2011-02-11 00:18:47">]
यदि आप किसी एसोसिएशन के माध्यम से ऑब्जेक्ट बना रहे हैं, build
तो इसे प्राथमिकता दी जानी चाहिए new
क्योंकि बिल्ड आपके इन-मेमोरी ऑब्जेक्ट को रखता है some_firm
(इस मामले में) किसी भी ऑब्जेक्ट को डेटाबेस में सहेजने से पहले भी एक सुसंगत स्थिति में।