1

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

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

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

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をセッションから削除したいと思います。これがafter_filterの機能です。

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

ただし、私はそれに満足していません(ちょっとハッキー)。また、リソースが更新された後もリソースを処理し、同じアプローチを2回使用したくない他のモジュールを用意する予定です。

使用すべきIRのフックはありますか?または、続行する方法に関する他のアイデアはありますか?

4

3 に答える 3

3

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

于 2011-06-12T22:36:25.267 に答える
2

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

"object.errors.empty?" 調子。作成または更新アクション後にオブジェクトにエラーがない場合は、モデルが適切に保存されたと想定しても安全です。

これは必ずしも真実ではないと思います。あなたと例を挙げましょう:

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

プロジェクトのメンバーも作成できるフォーム (ネストされたフォーム) を取得したとします。関連付けられたメンバーの作成でエラーが発生すると、プロジェクト オブジェクトが無効になりますが、プロジェクト インスタンスはメソッド errors.empty? に対して true を返します。

于 2011-06-13T10:31:09.000 に答える
2

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

class BaseController < InheritedResources::Base

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

# ...
end

class YourController < BaseController
# ...
end
于 2011-06-11T20:46:02.793 に答える