Ausführen von Aktionen nach erfolgreichem Erstellen oder Aktualisieren von Aktionen auf InheritedResources

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

Frage

Ich entwickle derzeit ein paar Module, um Code von meinen Controllern auf einer Rails 3 mithilfe von InheritedResources (Last Version) -App wiederverwenden zu können.

Meine Idee ist es, ein Verhalten zu haben, das nach einer erfolgreichen Erstellung oder Aktualisierung der Ressource ausgeführt werden sollte, außer dass ich, außer dass die Aktionen "Erstellen" oder "Update" neu anklagen, nicht sicher bin, wie man dies angeht.

Ich benutze gerade so etwas wie

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

Ich habe ein bestimmtes Ressourcen -Setup, das ich unter anderem die ID der Ressource zur Sitzung hinzufügt. Nachdem die Ressource erfolgreich in der BD gespeichert wurde, möchte ich ihre ID aus der Sitzung entfernen und das ist das, was der After_filter tut.

Ich habe es bisher damit zu tun, indem ich auch die Informationen updated_at in der Sitzung speichere und vergleicht, um festzustellen, ob das Modell aktualisiert wurde (wenn ja, hätte es erfolgreich sein müssen) und die Methode ausführen müssen.

Ich bin jedoch nicht mit dem (irgendwie hacky) zufrieden und ich plane auch, andere Module zu haben, die mit Ressourcen funktionieren, nachdem sie aktualisiert wurden und nicht zweimal denselben Ansatz verwenden möchte.

Gibt es einen Haken an IR, den ich verwenden sollte? Oder irgendwelche anderen Ideen, wie man vorgeht?

War es hilfreich?

Lösung

Ich habe es gelöst, indem ich "Object.Erors.EMpty?" Bedingung. Wenn das Objekt nach der Aktion für Erstellen oder Aktualisierung keine Fehler gibt, sollte sicher sein, dass das Modell ordnungsgemäß gespeichert wurde, und so wäre das Ausführen des Codes in Ordnung.

Andere Tipps

Vielleicht könnten Sie stattdessen einen Vererbungsansatz verwenden:

class BaseController < InheritedResources::Base

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

# ...
end

class YourController < BaseController
# ...
end

Es tut mir leid, die Antwortfunktion für einen Kommentar zu verwenden, aber da ich sie unter Ihrer Antwort nicht tun kann, sehe ich keine andere Option.

"Object.Erors.Empty?" Bedingung. Wenn das Objekt nach der Aktion für Erstellen oder Aktualisieren keine Fehler gibt, sollte sicher sein, dass das Modell ordnungsgemäß gespeichert wurde

Ich denke, das ist nicht immer wahr, lassen Sie mich Sie und ein Beispiel geben:

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

Stellen Sie sich vor, Sie haben ein Formular für das Projekt, in dem Sie auch Mitglieder dafür erstellen können (verschachtelte Formulare). Fehler bei der Erstellung der zugehörigen Mitglieder machen das Projektobjekt ungültig, aber die Projektinstanz wird für die Methodenfehler trugen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top