คุณกำลังอ่านเอกสารผิดเล็กน้อย some_firm.client.new
คือการสร้างใหม่Client
วัตถุจากการเก็บลูกค้าและดังนั้นจึงสามารถตั้งค่าโดยอัตโนมัติfirm_id
ไปsome_firm.id
ในขณะที่เอกสารที่มีการเรียกร้องClient.new
ที่มีความรู้ของ id บริษัท ใด ๆ ที่ไม่ทั้งหมดดังนั้นจึงต้องการ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
(ในกรณีนี้) ให้อยู่ในสถานะที่สอดคล้องกันก่อนที่อ็อบเจ็กต์จะถูกบันทึกลงในฐานข้อมูล