在控制器中,我试图将从视图接收到的params传递给另一个对象(负责处理完成操作所需的逻辑),但我正在与StrongParameters
进行斗争。< / p>
是否有办法允许某个键上的特定值,同时让其他参数通过?
例如,对于我的Role
模型,我想允许name
和activity_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
之后将其链接,但这会删除所有其他键。
感谢您的帮助。
答案 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!