使用StrongParameters允许而不删除其他键

时间:2016-11-03 04:40:33

标签: ruby-on-rails strong-parameters

在控制器中,我试图将从视图接收到的params传递给另一个对象(负责处理完成操作所需的逻辑),但我正在与StrongParameters进行斗争。< / p>

是否有办法允许某个键上的特定值,同时让其他参数通过?

例如,对于我的Role模型,我想允许nameactivity_ids

所以当控制器得到

"role"=>{"name"=>"simple", "activity_ids"=>["", "1", "2"]}, 
"auth_code"=>"123", "button"=>"", "id"=>"simple"}

它应该通过

"role"=>{"name"=>"simple", "activity_ids"=>["", "1", "2"],  permitted: true}, 
"auth_code"=>"123", "button"=>"", "id"=>"simple"}

因此可以使用批量分配创建/更新角色。

而且,收到时应该通过

"role"=>{"name"=>"simple", "activity_ids"=>["", "1", "2"], "injected" => "DELETE FROM roles"}, 
"auth_code"=>"123", "button"=>"", "id"=>"simple"}

我可以使用permit的唯一方法是在require之后将其链接,但这会删除所有其他键。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用两种方法实现此目的,

方法1:

使用permit_all_parameters

permit_all_parameters - 如果是,则默认允许所有参数。默认值为false。

ActionController::Parameters.permit_all_parameters = true

例如:

params = ActionController::Parameters.new
params.permitted? # => false

ActionController::Parameters.permit_all_parameters = true

params = ActionController::Parameters.new
params.permitted? # => true

The reference for permitted parameters

方法2:

您可以链接require语句以满足您的需求。

params = { "role"=>{"name"=>"simple", "activity_ids"=>["", "1", "2"]}, 
"auth_code"=>"123", "button"=>"", "id"=>"simple" }

params.require(:role).require(:auth_code).require(:id).permit!