Rails/ActiveRecord: enregistrer les modifications apportées à un modèle associé collections
Dois-je enregistrer les modifications apportées à des éléments dans une collection pour un modèle, ou est-il une méthode pour que je puisse appeler pour le sauver quand j'ai enregistrer le modèle.
#save
ne semble pas le faire. Par exemple:
irb> rental = #...
#=> #<Rental id: 18737, customer_id: 61, dvd_id: 3252, date_rented: "2008-12-16 05:00:00", date_shipped: "2008-12-16 05:00:00", date_returned: "2008-12-22 05:00:00">
irb> rental.dvd
#=> #<Dvd id: 3252, title: "The Women of Summer", year: 1986, copies: 20, is_new: false, is_discontinued: false, list_price: #<BigDecimal:1a48f0c,'0.1599E2',8(8)>, sale_price: #<BigDecimal:1a48ed0,'0.1599E2',8(8)>>
irb> rental.dvd.copies += 1
#=> 21
irb> rental.save
#=> true
irb> rental.dvd
#=> #<Dvd id: 3252, title: "The Women of Summer", year: 1986, copies: 21, is_new: false, is_discontinued: false, list_price: #<BigDecimal:1a2e9cc,'0.1599E2',8(8)>, sale_price: #<BigDecimal:1a2e97c,'0.1599E2',8(8)>>
irb> Dvd.find_by_title('The Women of Summer')
#=> #<Dvd id: 3252, title: "The Women of Summer", year: 1986, copies: 20, is_new: false, is_discontinued: false, list_price: #<BigDecimal:1a30164,'0.1599E2',8(8)>, sale_price: #<BigDecimal:1a30128,'0.1599E2',8(8)>>
Dans l'exemple ci-dessus, la copie du DVD, la location a ne semble pas de mise à jour de la copie dans la DB (notez les différences de nombre de copies).
OriginalL'auteur rampion | 2009-05-15
Vous devez vous connecter pour publier un commentaire.
il suffit de faire une location.de dvd.enregistrer après l'incrémentation de la valeur ou, dans le cas ci-dessus, vous pouvez utiliser
qui sera également enregistrer automatiquement, note la"! " sur incrément!
OriginalL'auteur Corban Brook
Vous pouvez configurer ActiveRecord pour cascade-enregistrer les modifications apportées à des éléments dans une collection pour un modèle en ajoutant les
:autosave => true
option lors de la déclaration de l'association. Lire plus.Exemple:
OriginalL'auteur mockaroodev
Ce n'est pas tout à fait vrai. Vous pouvez utiliser la "construction" de la méthode qui permettra de force de sauver. Pour exemple supposons que vous disposez d'un modèle de Société et les Employés de l'Entreprise (has_many Employés). Vous pourriez faire quelque chose comme:
Créerait tous les 4 dossiers, le dossier de l'Entreprise et les 3 dossiers d'Employés et de la company_id serait poussé vers le bas de l'objet Employé de façon appropriée.
Important de noter que cela ne fonctionne que dans le cas de nouvelles instances de modèle.
OriginalL'auteur Cody Caughlan
Que vous avez à faire vous-même. Active Record n'a pas de cascade enregistrer les opérations dans has_many relations après la période initiale de l'enregistrer.
Vous pouvez automatiser le processus avec un
before_save
de rappel.OriginalL'auteur jmay
Ce post peut être utile:
http://erikonrails.snowedin.net/?p=267
Erik décrire comment utiliser "accepts_nested_attributes_for" dans le modèle et < f%.fields_for %> dans la vue de faire le travail.
Sa description détaillée peut être trouvée dans:
http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html
OriginalL'auteur Fábio Miranda