我目前正在开发几个模块,以便使用 InheritedResources(最新版本)应用程序在 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,这就是 after_filter 所做的。
到目前为止,我已经通过将 updated_at 信息保存到会话中并比较以查看模型是否已更新(如果是,它应该已成功)并运行该方法来处理它。
但是,我对此并不满意(有点 hacky),而且我计划让其他模块在更新后也可以与资源一起使用,并且不想两次使用相同的方法。
我应该使用 IR 上的钩子吗?或者关于如何进行的任何其他想法?