Vous êtes à la lecture de la documentation légèrement. some_firm.client.new
est la création d'un nouveau Client
objet de la part des clients de la collection, et il peut donc définir automatiquement l' firm_id
de some_firm.id
, alors que les docs sont en appelant Client.new
qui n'a aucune connaissance de toute Entreprise de l'id, c'est pourquoi elle a besoin de l' firm_id
passée.
La seule différence entre some_firm.clients.new
et some_firm.clients.build
semble être qu' build
ajoute également de la création du nouveau client à l' clients
collection:
henrym:~/testapp$ rails c
Le chargement de l'environnement de développement (Rails 3.0.4)
r:001 > (some_firm = Ferme.de nouvelles).enregistrer # Créer et enregistrer une nouvelle Entreprise
=> true
r:002 > some_firm.les clients # Pas de clients encore
=> []
r:003 > some_firm.clients.nouveau # Créer un nouveau client
=> #<Client id: néant, firm_id: 1, created_at: néant, updated_at: néant> >
r:004 > some_firm.les clients # Toujours pas de clients
=> []
r:005 > some_firm.clients.build # Créer un nouveau client de construire avec
=> #<Client id: néant, firm_id: 1, created_at: néant, updated_at: néant> >
r:006 > some_firm.les clients # Nouveau client est ajoutée aux clients
=> [#<Client id: néant, firm_id: 1, created_at: néant, updated_at: néant>>]
r:007 > some_firm.enregistrer
=> true
r:008 > some_firm.les clients # Économie d'entreprise enregistre également le client
=> [#<Client id: 1, firm_id: 1, created_at: "2011-02-11 00:18:47",
updated_at: "2011-02-11 00:18:47">]
Si vous êtes à la création d'un objet à travers une association, build
doit être préférée à l' new
construire maintient votre objet en mémoire, some_firm
(dans ce cas) dans un état cohérent même avant tous les objets ont été enregistrées dans la base de données.