【发布时间】:2018-03-21 01:00:45
【问题描述】:
我试图从我的 ActionController::Parameters 对象中删除一个元素,但它没有按我的预期工作。我的report_params对象如下,
<ActionController::Parameters {"id"=>"51956915", "author_id"=>"1", "workout_attributes"=><ActionController::Parameters {"player_id"=>"14155", "date"=>"2017-10-09", "report_id"=>"51956915"} permitted: true> permitted: true>
我想执行以下操作以从对象中删除workout_attributes。
report_params.extract!(:workout_attributes)
这会返回下面的信息,但是当我重新运行report_params时它仍然存在
<ActionController::Parameters {"player_id"=>"14155", "date"=>"2017-10-09", "report_id"=>"51956915"} permitted: true>
当我在控制台中重新运行report_params...
<ActionController::Parameters {"id"=>"51956915", "author_id"=>"1", "workout_attributes"=><ActionController::Parameters {"player_id"=>"14155", "date"=>"2017-10-09", "report_id"=>"51956915"} permitted: true> permitted: true>
更新 这是控制器的 report_params 方法:
def report_params
params.require(:report).permit(:id, :author_id,
workout_attributes: [:player_id, :report_id, :date]
)
end
那么我是否不允许编辑report_params 对象,我需要制作它的副本,然后将该副本传递给操作中的更新函数?或者这里有什么我做的不对?谢谢!
使用“有效”的解决方案进行更新
我发现如果我执行以下操作,基本上是制作参数的副本,然后编辑并传递 - 它可以工作。但是,如果可以使用实际的原始 params 对象来完成,这似乎是丑陋的代码。
modified_report_params = report_params
modified_report_params.extract!(:workout_attributes)
respond_to do |format|
format.js do
if @report.update(modified_report_params)
# ...
end
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-5 strong-parameters actioncontroller