【问题标题】:Rails 4 Unpermitted Parameters for ArrayRails 4 不允许的数组参数
【发布时间】:2013-07-25 23:30:12
【问题描述】:

我的模型中有一个数组字段,我正在尝试更新它。

我的强参数方法如下

def post_params
  params["post"]["categories"] = params["post"]["categories"].split(",")

  params.require(:post).permit(:name, :email, :categories)
end

我在控制器中的操作如下

def update
  post = Post.find(params[:id]

  if post and post.update_attributes(post_params)
    redirect_to root_url
  else
    redirect_to posts_url
  end
end

但是,每当我提交更新帖子时,我都会在我的开发日志中看到

Unpermitted parameters: categories

传递的参数是

  Parameters: {"utf8"=>"✓", "authenticity_token"=>"auth token", "id"=>"10", 

"post"=>{"name"=>"Toni Mitchell", "email"=>"eileen_hansen@hayetokes.info", "categories"=>",2"}}

我想这与属性 categories 是一个数组这一事实有关,因为其他一切看起来都很好。再说一次,我可能是错的。那么,我的代码有什么问题,为什么在明确允许的情况下不让我保存类别字段?谢谢。

【问题讨论】:

  • 可能是因为你设置categories参数值的方式,iirc的params对象不是简单的hash,你试过更简单的例子吗?

标签: ruby-on-rails ruby ruby-on-rails-4 strong-parameters


【解决方案1】:

试试这个

params.require(:post).permit(:name, :email, :categories => [])

(忽略我的评论,我认为这不重要)

【讨论】:

  • 嗨,我有一个问题 Bid(#69846105528920) 预期,得到字符串(#8248680)
  • 您好,有没有办法根据数组中的类别查找帖子,例如Post.find_by(tags: 'sports')
  • 最好也能解释一下为什么会这样@slicedpan
【解决方案2】:

在 Rails 4 中,那将是,

params.require(:post).permit(:name, :email, {:categories => []})

【讨论】:

  • 这对我有用,但是如果我们已经在模型中定义了该属性的序列化,为什么它需要在单独的哈希中?
【解决方案3】:

允许的标量类型为StringSymbolNilClassNumericTrueClassFalseClassDateTimeDateTime、@987654333 @、ActionDispatch::Http::UploadedFileRack::Test::UploadedFile

要声明 params 中的值必须是允许的标量值数组,请将键映射到空数组:

params.permit(:id => [])

strong parameters documentation on Github 是这么说的:

params.require(:post).permit(:name, :email, :categories => [])

我希望这对你有用。

【讨论】:

    【解决方案4】:

    我遇到了同样的问题,但是仅仅添加数组来允许是不够的。我也必须添加类型。这样:

    params.require(:transaction).permit(:name, :tag_ids => [:id])
    

    我不确定这是否是完美的解决方案,但在那之后,'Unpermitted parameters' 日志消失了。

    我从这篇出色的帖子中找到了该解决方案的提示:http://patshaughnessy.net/2014/6/16/a-rule-of-thumb-for-strong-parameters

    【讨论】:

      【解决方案5】:

      我遇到了同样的问题,但在我的情况下,我还必须更改:

      <input type="checkbox" name="photographer[attending]" value="Baku">

      到:

      <input type="checkbox" name="photographer[attending][]" value="Baku">

      希望这对某人有所帮助。

      【讨论】:

        【解决方案6】:

        如果有多个item和item_array这样的参数里面-

        Parameters {"item_1"=>"value 1", "item_2"=> {"key_1"=> "value A1", 
        "key_2"=>["val B2", "val C3"]} }
        

        我们在item_2中有数组。
        可以允许如下-

        params.permit(item_2: [:key_1, :key_2 => [] ])
        

        以上拯救了我的一天,可能对你也有帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-08-01
          • 2023-03-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-11
          相关资源
          最近更新 更多