58 votes

after_commit pour un attribut

J'utilise un after_commit dans mon application.

Je voudrais qu'il se déclenche uniquement lorsqu'un champ particulier est mis à jour dans mon modèle. Quelqu'un sait-il comment faire ?

4voto

Devin M Points 6848

Il semble que vous souhaitiez quelque chose comme un rappel conditionnel . Si vous aviez affiché un code, j'aurais pu vous orienter dans la bonne direction, mais je pense que vous voudriez utiliser quelque chose comme ceci :

after_commit :callback,
  :if => Proc.new { |record| record.field_modified? }

1 votes

Je ne sais pas si je vais devoir écrire une méthode pour vérifier la valeur du champ. En fait, j'essaie de recalculer et d'enregistrer la note d'un utilisateur en fonction de toutes les notes qu'il a attribuées à ses rendez-vous. Je voudrais savoir si le champ rating a été mis à jour. Voici une partie du code avec lequel je travaille classe Appointment < ActiveRecord::Base ... after_commit :update_user_and_product_ratings def update_user_and_product_ratings self.user.update_rating self.product.update_rating end

0voto

Simon Liu Points 89

Utiliser la pierre précieuse ArTransactionChanges . previous_changes ne fonctionne pas pour moi dans Rails 4.0.x

Utilisation :

class User < ActiveRecord::Base
  include ArTransactionChanges

  after_commit :print_transaction_changes

  def print_transaction_changes
    transaction_changed_attributes.each do |name, old_value|
      puts "attribute #{name}: #{old_value.inspect} -> #{send(name).inspect}"
    end
  end
end

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