我想向用户显示在PUT / PATCH请求后修改了哪些字段
例如,我有一个很大的“项目”表单,有几个字段,但我的用户决定只更新截止日期和项目名称。点击“保存”按钮后,我想显示一条消息“您已成功更新:名称,截止日期”
如果可能,我想要一些检测更新操作并推断变量名称的通用代码。通用我的意思是,我想在我的ApplicationController中实现它,所以我不必在每个控制器中添加代码#update action
让我们看一下 controllers / entreprise_controller.rb
中的示例代码def update
if @entreprise.update_attributes(entreprise_params)
redirect_to @entreprise, notice: "Entreprise éditée"
else
render 'edit'
end
end
以下是实现目标的步骤。你能帮我解决这些问题吗?或者建议一个更好的方法?
update
操作,例如来自代码中的操作名称,该操作应始终为update
(如何从代码中读取名称正在执行的行动?)@entreprise
,例如可以从文件中推断出来(或者可能调用self.class
并做一些正则表达式?)before_action
和after_action
以及dirty_tracking的一些技巧?请参阅我的编辑。)redirect to @entreprise
的GET参数提供(应该非常简单)编辑
Mongoid已经实现了这一点。然而,主要问题是在保存之前获取中间变量。每个控制器在@entreprise
回调期间实例化before_action
之类的变量。如果我在我的ApplicationController中添加before_action
,它将在之前触发,因此还没有可用的变量。关于ApplicationController中可能的after_action
,文档说“任何持久性操作都会清除更改”。所以它已经死了。如果不重写每个控制器,我可能无法逃脱?
Dirty Tracking&控制器简而言之:
prepend_before_action
ApplicationController的before_action
before_action
(包括set_entreprise,其中定义变量@entreprise
以便继续更新)@entreprise.attributes=entreprise_params
并查看脏信息(其中entreprise_params是@entreprise的强大参数)after_action