163 votes

Rails 3 vérifier si l’attribut modifié

Besoin de vérifier si un bloc d’attributs a changé avant mise à jour à 3 Rails.

Rue1, street2, ville, État, code postal

Je sais que je pourrais utiliser quelque chose comme

Mais ce morceau de code sera très long. Y a-t-il un moyen plus propre ?

297voto

Beerlington Points 25012

Découvrez ActiveModel::Dirty (disponible sur tous les modèles par défaut). La documentation est vraiment bonne, mais il vous permet de faire des choses comme :

59voto

campeterson Points 515

Voilà comment j'ai résolu le problème du contrôle de changements dans plusieurs attributs.

attrs = ["street1", "street2", "city", "state", "zipcode"]

if (@user.changed & attrs).any?
  then do something....
end

@user.changed () retourne un tableau des attributs changé (http://api.rubyonrails.org/classes/ActiveModel/Dirty.html#method-i-changed)

Les deux @user.changed et attributes sont des tableaux afin que je puisse obtenir l'intersection avec l' & (http://api.rubyonrails.org/classes/ActiveModel/Dirty.html#method-i-changed). Le résultat de l'intersection est un tableau. En appelant any? sur le tableau, je reçois vrai si il existe au moins une intersection.

Également très utile, l' changed_attributes méthode retourne la valeur de hachage des attributs avec leurs valeurs d'origine et l' changes méthode retourne la valeur de hachage des attributs avec leur origine et de nouvelles valeurs (dans un tableau).

Vous pouvez le vérifier APIDock pour les versions prises en charge de ces méthodes. http://apidock.com/rails/ActiveModel/Dirty

16voto

hamstar Points 575

n’a pas fonctionné pour moi, parce que le se cachaient les changements. Donc voilà comment j’ai détecté le modifie dans une `` méthode dans un contrôleur :

Si vous essayez de détecter un grand nombre de modifications d’attributs il pourrait être gênant cependant. Sans doute ne devrait pas le faire dans un contrôleur, mais meh.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X