如何修改动作中控制器中设置的`params`?

时间:2016-11-19 20:12:37

标签: ruby-on-rails ruby ruby-on-rails-5 strong-parameters

我将以下参数传递给我的ProfilesController#Update

> profile_params[:videos_attributes]
=> <ActionController::Parameters {"1479585381276"=><ActionController::Parameters {"vimeo_url"=>"https://www.youtube.com/watch?v=Qj2gkjh3-k", "official"=>"false", "_destroy"=>"false"} permitted: true>, "1479585385202"=><ActionController::Parameters {"vimeo_url"=>"https://vimeo.com/some-awesome-video", "official"=>"true", "_destroy"=>"false"} permitted: true>} permitted: true>

我想要做的是删除密钥为1479585381276的哈希(或任何哈希)

我尝试使用.delete(key)并且似​​乎无法正常工作。

> item
=> "1479585381276"
> profile_params[:videos_attributes].delete(item)
=> <ActionController::Parameters {"vimeo_url"=>"https://www.youtube.com/watch?v=Qas34Pce-k", "official"=>"false", "_destroy"=>"false"} permitted: true>
> profile_params[:videos_attributes]
=> <ActionController::Parameters {"1479585381276"=><ActionController::Parameters {"vimeo_url"=>"https://www.youtube.com/watch?v=Qas34Pce-k", "official"=>"false", "_destroy"=>"false"} permitted: true>, "1479585385202"=><ActionController::Parameters {"vimeo_url"=>"https://vimeo.com/some-awesome-video", "official"=>"true", "_destroy"=>"false"} permitted: true>} permitted: true>

我想这样做的原因是因为当我评估参数时,它仍会传递到我@profile.update(profile_params)后半段的Profiles#Update并创建一条记录我不会想要它创造。

所以我想做的就是成功处理,删除/弹出/从profile_params[:videos_attributes]哈希中删除它。

1 个答案:

答案 0 :(得分:3)

profile_params每次都会返回一个新哈希值(包含来自params的白名单数据的副本)。直接修改params

params[:profile][:videos_attributes].delete(item)

我以前被这个烧过了。 :)