在 Controller 中,我试图将从 View 接收到的参数传递给另一个对象(负责处理完成操作所需的逻辑),但我正在努力解决 StrongParameters
.
有没有办法允许键上的特定值,同时让其他参数通过?
例如,对于我的 Role
我想要允许的型号 name
和activity_ids
.
所以当 Controller 得到
"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
之后但这会删除所有其他键。
感谢您的帮助。
最佳答案
您可以使用两种方法来实现此目的,
方法一:
使用permit_all_parameters
permit_all_parameters
- 如果为 true,则默认情况下允许所有参数。默认为 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!
关于ruby-on-rails - 使用 StrongParameters 允许无需删除其他键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40393974/