ruby-on-rails - 使用 StrongParameters 允许无需删除其他键

标签 ruby-on-rails strong-parameters

在 Controller 中,我试图将从 View 接收到的参数传递给另一个对象(负责处理完成操作所需的逻辑),但我正在努力解决 StrongParameters .

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

例如,对于我的 Role我想要允许的型号 nameactivity_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/

相关文章:

ruby-on-rails - rails 4 : How to permit a hash with dynamic keys in params?

ruby-on-rails - Rails 强参数 - POST 一个 json 数组 + 一个额外的根字段

ruby-on-rails - 使用 JSON Rails 创建多个对象

ruby-on-rails - ruby 的 `create!` 有什么方法可以一次制作多个对象吗?

ruby-on-rails - 在 yaml 列表中插入?

ruby-on-rails - Rails API 设计无需禁用 CSRF 保护

ruby-on-rails - 使用 belongs_to 创建强参数

ruby-on-rails - Rails 4 不允许的数组参数

sql - 在 Rails 3.2 中禁用解释

ruby-on-rails - Ruby 生成唯一整数用作主键