Rails: update_attribute vs update_attributes

Object.update_attribute(:only_one_field, "Some Value")
Object.update_attributes(:field1 => "value", :field2 => "value2", :field3 => "value3")

Ces mise à jour d'un objet sans avoir à indiquer de façon explicite à l'AR de mise à jour.

Rails API dit:

pour update_attribute

Mises à jour d'un seul attribut et enregistre le dossier sans passer par la procédure de validation. Ceci est particulièrement utile pour les booléens drapeaux sur les enregistrements existants. Le régulier update_attribute méthode de Base est remplacé lors de la validation du module de mélange, qui est fait par défaut.

pour update_attributes

Les mises à jour de tous les attributs de le passé-de Hachage et enregistre le record. Si l'objet n'est pas valide, la sauvegarde échouera et sera retournée.

Donc si je ne veux pas avoir l'objet validé, je devrais utiliser update_attribute. Que faire si j'ai cette mise à jour sur un before_save, il stackoverflow?

Ma question c'est est-ce update_attribute également ignorer de l'avant de l'enregistrer ou tout simplement de la validation.

Aussi, quelle est la bonne syntaxe pour passer d'un hachage pour update_attributes... découvrez mon exemple au dessus.

  • Pourquoi voulez-vous mettre un update_attribute énoncé à l'intérieur d'un before_save de rappel? Je ne peux pas penser à une bonne raison pour cela.
  • J'ai des objets qui doivent être mis à jour en fonction de ce que la mise à jour de l'objet montant est. Quelle est la meilleure façon de faire?
  • Suis-je en droit, que les objets que vous avez besoin de mettre à jour des attributs de l'objet que vous enregistrez? Si oui, alors vous pourriez tout simplement, et ils seront mis à jour avec l'objet qui est sauvé de toute façon (parce qu'ils sont définis à l'intérieur d'un before_save de rappel). F. e. au lieu de update_attribute(:discount, 0.1) if amount > 100 vous pourriez faire discount = 0.1 if amount > 100. update_attribute appels save sur l'objet, ce qui est inutile dans ce cas, puisque la déclaration est à l'intérieur d'un before_save de rappel et d'être sauvés de toute façon. J'espère qu'un sens.
  • Oui et non. Cependant, le statut des objets que vous faites référence est subordonnée à d'autres conditions qui ne peuvent pas être traitées avant de les enregistrer.
  • comme une note, ces méthodes sauter de validation, mais toujours effectuer des rappels, comme after_save ...
InformationsquelleAutor thenengah | 2010-05-06