Rails 5允许控制器操作改变参数

时间:2017-11-05 05:55:23

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

所以我允许以下参数。

p = params.permit(:a, :b, :c, :lines => [:location_id, :quantity, :product => [:id]])

在我的控制器操作中,我将lines参数添加到我允许的数据中。

p['lines'] << {"product"=>{"id"=>"123456"}, "quantity"=>"2", "location_id"=>"123456"}

这是params在他们被改变后的样子。

puts params['lines']
#> [<ActionController::Parameters {"product"=>{"id"=>"123456"}, "quantity"=>"2", "location_id"=>"123456"} permitted: false>]

但是你可以看到它是不允许的。我在这里失踪了什么?我正在使用Rails 5.

1 个答案:

答案 0 :(得分:1)

要获得允许(列入白名单)参数,您始终必须确保在p更改时调用允许的版本params

paramsp之间的区别在于params.permit(...)会返回自己的允许副本,并将其分配给p。所以params权限状态保持不变。

尝试使用puts p['lines']代替puts params['lines'],看看您是否获得了理想的结果。