成功した後のアクションを実行した後、expentresourcesでアクションを作成または更新する

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

質問

現在、Rails 3でコントローラーからコードを再利用するためのいくつかのモジュールを開発しています(最後のバージョン)アプリを使用しています。

私のアイデアは、リソースの作成または更新の成功後に実行される必要がある動作をすることですが、「作成」アクションまたは「更新」アクションを再特定することを除き、これに取り組む方法についてはわかりません。

私は現在、ようなものを使用しています

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

特にリソースのIDをセッションに追加する特定のリソースセットアップがあります。リソースがBDに正常に保存された後、セッションからIDを削除したいと思います。

また、セッションにupdated_at情報を保存し、モデルが更新されたかどうかを確認し(もしそうなら、それは正常に行われているはずです)、メソッドを実行することで、これまでに対処します。

しかし、私はそれに満足していません(ちょっとハッキー)。また、リソースが更新され、同じアプローチを2回使用したくない他のモジュールを持つことを計画しています。

IRに使用する必要があるフックはありますか?または進める方法に関する他のアイデアはありますか?

役に立ちましたか?

解決

「object.errors.empty?」を使用して解決しました。調子。作成または更新アクションの後にオブジェクトにエラーがない場合は、モデルが適切に保存されているため、コードを実行することは問題ありません。

他のヒント

代わりに、継承ベースのアプローチを使用できます。

class BaseController < InheritedResources::Base

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

# ...
end

class YourController < BaseController
# ...
end

コメントのために回答機能を使用して申し訳ありませんが、あなたの回答の下でそれを行うことができないので、他の選択肢はありません。

「Object.Errors.Empty?」調子。作成または更新アクションの後にオブジェクトにエラーがない場合は、モデルが適切に保存されたと仮定するのは安全である必要があります

これは必ずしも真実ではないと思います。あなたを置いてみましょう:

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

プロジェクトのフォームを手に入れたと想像してください。このフォームでは、メンバー(ネストされたフォーム)を作成できます。関連するメンバーの作成のエラーは、DEプロジェクトオブジェクトが無効になりますが、プロジェクトインスタンスはメソッドエラーに対してtrueを返します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top