actions en cours d'exécution après les actions réussies créer ou mettre à jour sur InheritedResources

StackOverflow https://stackoverflow.com/questions/6317389

Question

Je développe actuellement deux modules au code de réutilisation de mes contrôleurs sur un Rails 3 en utilisant InheritedResources (dernière version) app.

Mon idée est d'avoir un comportement qui devrait être exécuté après un succès créer ou mise à jour de la ressource, mais, à l'exception de redéclarant les actions « créer » ou « mise à jour », je ne suis pas sûr de la façon d'aborder ce sujet.

J'utilise actuellement quelque chose comme

module SessionStorable

  extend ActiveSupport::Concern
  include Base

  included do
    before_filter :setup_resource, :only => :new
    after_filter :reset_session_resource_id, :only => [:create, :update]
  end


  # ....

end

J'ai une utilisation de configuration de ressource particulière I qui, entre autres choses, ajoute l'identifiant de la ressource à la session. Une fois la ressource a été enregistré avec succès à la BD, je voudrais supprimer id est tout de la session et c'est ce que le fait after_filter.

Je l'ai beaucoup avec elle jusqu'à présent en enregistrant également les informations updated_at sur la session et de comparer pour voir si le modèle a été mis à jour (le cas échéant, il aurait dû être avec succès) et exécuter la méthode.

Cependant, je ne suis pas très satisfaite avec elle (un peu hacky) et aussi je prévois d'avoir d'autres modules qui fonctionnent avec des ressources aussi après qu'ils ont été mis à jour et ne veulent pas utiliser la même approche à deux reprises .

Y at-il un crochet sur IR que je devrais utiliser? Ou d'autres idées sur la façon de procéder?

Était-ce utile?

La solution

Je l'ai résolu en utilisant le « object.errors.empty? » état. S'il n'y a aucune erreur sur l'objet après la création ou l'action de mise à jour, il doit être sûr de supposer que le modèle a été correctement enregistré, et en cours d'exécution ainsi le code serait bien.

Autres conseils

Peut-être que vous pourriez utiliser une approche basée sur l'héritage à la place:

class BaseController < InheritedResources::Base

before_filter :setup_resource, :only => :new
after_filter :reset_session_resource_id, :only => [:create, :update]

# ...
end

class YourController < BaseController
# ...
end

Je suis désolé d'utiliser la fonction de réponse à un commentaire, mais comme je ne peux pas le faire sous votre réponse que je ne vois pas d'autre option.

"object.errors.empty?" état. S'il n'y a aucune erreur sur l'objet après la création ou l'action de mise à jour, il doit être sûr de supposer que le modèle a été correctement enregistré

Je pense que ce n'est pas toujours vrai, laissez-moi vous mettre et par exemple:

class Project < ActiveRecord:Base
  has_many :members
  # ...
end

Imaginez que vous avez un formulaire pour le projet dans lequel vous pouvez également créer des membres pour elle (formes imbriquées). Des erreurs dans la création des membres associés feront de l'objet de projet non valide, mais l'instance de projet retourne vrai pour la méthode errors.empty?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top