Rails 4数组未允许的参数

时间:2013-07-25 21:06:33

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

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

我的强参数方法在

之下
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是一个数组的事实有关,因为其他一切看起来都很好。然后,我可能是错的。那么,我的代码出了什么问题,为什么在明确允许的情况下不让我保存类别字段呢?感谢。

5 个答案:

答案 0 :(得分:131)

试试这个

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

(无视我的评论,我认为不重要)

答案 1 :(得分:40)

在rails 4中,即

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

答案 2 :(得分:8)

允许的标量类型包括StringSymbolNilClassNumericTrueClassFalseClassDateTimeDateTimeStringIOIOActionDispatch::Http::UploadedFileRack::Test::UploadedFile

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

params.permit(:id => [])

这是strong parameters documentation on Github所说的:

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

我希望这对你有用。

答案 3 :(得分:1)

我有同样的问题,但在我的情况下,我也要改变:

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

为:

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

希望这有助于某人。

答案 4 :(得分:1)

我有同样的问题,但只是添加数组到许可是不够的。我也必须添加类型。这样:

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

我不确定这是否是完美的解决方案,但在此之后,“未经许可的参数”日志消失了。

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