Bạn đang đọc sai các tài liệu một chút. some_firm.client.new
đang tạo ra một mới Client
đối tượng từ bộ sưu tập của khách hàng, và vì vậy nó có thể tự động thiết lập firm_id
để some_firm.id
, trong khi các tài liệu được gọi Client.new
mà không có kiến thức về id của bất kỳ Công ty nào cả, vì vậy nó cần firm_id
được truyền cho nó.
Sự khác biệt duy nhất giữa some_firm.clients.new
và some_firm.clients.build
dường như build
cũng là thêm ứng dụng khách mới được tạo vào clients
bộ sưu tập:
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">]
Nếu bạn đang tạo một đối tượng thông qua một liên kết, build
nên được ưu tiên hơn new
vì bản dựng giữ cho đối tượng trong bộ nhớ của bạn, some_firm
(trong trường hợp này) ở trạng thái nhất quán ngay cả trước khi bất kỳ đối tượng nào được lưu vào cơ sở dữ liệu.