La fonction de rappel pour changé ActiveRecord attributs?
Je suis conscient de ActiveRecord::Sale et les méthodes associées, mais je ne vois pas un moyen par lequel je peux vous abonner à un attribut d'un événement a changé. Quelque chose comme:
class Person < ActiveRecord::Base
def attribute_changed(attribute_name, old_value, new_value)
end
#or
attribute_changed do |attribute_name, old_value, new_value|
end
end
Est-il des Rails standard ou un plugin pour ça? Je pense qu'il doit être là quelque part et que je suis juste en manque c'.
Vous devez vous connecter pour publier un commentaire.
cwninja la réponse devrait faire l'affaire, mais il y a un peu plus d'elle.
Tout d'abord, l'attribut de base de la manipulation se fait avec le write_attribute méthode de sorte que vous devriez être en puisant dans ce.
Rails aussi a une construite dans le rappel de la structure qui pourrait être sympa à exploiter si elle ne permet pas de passer des arguments qui est un peu ennuyeux.
En utilisant des rappels vous pourriez le faire comme ceci:
Si vous voulais essayer d'utiliser des Rails de rappels (particulièrement utile si vous avez plusieurs rappels et/ou sous-classement) vous pourriez faire quelque chose comme ceci:
after_callbacks
Pour Rails 3:
A commenté: https://stackoverflow.com/a/1709956/316700
Je ne trouve pas de documentation officielle sur ce sujet.
my_object.some_attr = "foo"
permettrait de générer un rappel.after_update
est obsolète depuis des rails 2.3 (apidock.com/rails/ActiveRecord/Callbacks/after_update)Pour Les Rails 4
Si vous souhaitez remplacer la valeur de l'attribut, vous devez utiliser
write_attribute(:attribute, your_callback(self.attribute))
et pasattribute=
ou vous serez en boucle jusqu'à ce que vous obtenez une pile trop profonde exception.essayer:
Viens d'inventer ce moment, mais ça devrait fonctionner.
Vous pouvez toujours accéder à la méthode privée
changed_attributes
et vérifier les clés il y a à l'aide d'unbefore_save
et en faire ce que vous voulez.La façon la plus simple que j'ai trouvé: