如何允许具有 Rails 强参数的哈希

San*_*yal 5 ruby-on-rails strong-parameters

我正在开发一个带有名为 element 的 atter_accessor 对象的模型。我想将表单数据数组传递给元素对象。在 Rails 控制台中,我收到“未经允许的参数”错误。

Parameters: {"authenticity_token"=>"[FILTERED]", "category"=>{"name"=>"asfd", "body"=>"asf", "element"=>{"1"=>"asfd:text", "2"=>"asfd:text", "3"=>"asfd:text"}}, "type"=>"text", "commit"=>"Create Category"}
Unpermitted parameter: :element. Context: { controller: CategoriesController, action: create, request: #<ActionDispatch::Request:0x0000000106b3ff68>, params: {"authenticity_token"=>"[FILTERED]", "category"=>{"name"=>"asfd", "body"=>"asf", "element"=>{"1"=>"asfd:text", "2"=>"asfd:text", "3"=>"asfd:text"}}, "type"=>"text", "commit"=>"Create Category", "controller"=>"categories", "action"=>"create"} }
Run Code Online (Sandbox Code Playgroud)

模型中 attr_accessor :elements

在控制器中

def category_params
  params.require(:category).permit(:name, :body, :elements => []) 
end
Run Code Online (Sandbox Code Playgroud)

我尝试了很多替代方案,也将其更改:elementselement: [],但没有任何效果。我想我在这里遗漏了一些东西,这就是我得到未经允许的参数的原因。

Sha*_*nak 4

您没有提到您正在使用的 Rails 版本,但是 :elements => []不起作用,因为 elements 是 ruby​​ 哈希而不是数组

在 Rails 5.1+ 上你可以使用

params.require(:category).permit(:name, :body, :elements => {}) 
Run Code Online (Sandbox Code Playgroud)