成功した後のアクションを実行した後、expentresourcesでアクションを作成または更新する
-
26-10-2019 - |
質問
現在、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を返します。