Rails 4 Unpermitted Parameters for Array
我的模型中有一个数组字段,我正在尝试更新它。
我的强参数方法如下
1 2 3 4 5  | def post_params params["post"]["categories"] = params["post"]["categories"].split(",") params.require(:post).permit(:name, :email, :categories) end  | 
我在控制器中的操作如下
1 2 3 4 5 6 7 8 9  | 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  | 
但是,每当我提交更新帖子时,我都会在我的开发日志中看到
1  | Unpermitted parameters: categories  | 
传递的参数是
1 2 3  |   Parameters: {"utf8"=>"?","authenticity_token"=>"auth token","id"=>"10",  "post"=>{"name"=>"Toni Mitchell","email"=>"[email protected]","categories"=>",2"}}  | 
我想这与属性 
试试这个
1  | params.require(:post).permit(:name, :email, :categories => [])  | 
(忽略我的评论,我认为这不重要)
在 rails 4 中,即
1  | params.require(:post).permit(:name, :email, {:categories => []})  | 
允许的标量类型为 
要声明 params 中的值必须是允许的标量值数组,请将键映射到空数组:
1  | params.permit(:id => [])  | 
Github 上的强参数文档是这样说的:
1  | params.require(:post).permit(:name, :email, :categories => [])  | 
我希望这对你有用。
我遇到了同样的问题,但是仅仅添加数组来允许是不够的。我也必须添加类型。这样:
1  | params.require(:transaction).permit(:name, :tag_ids => [:id])  | 
我不确定这是否是完美的解决方案,但在那之后,\\'Unpermitted parameters\\'日志消失了。
我从这篇出色的帖子中找到了该解决方案的提示:http://patshaughnessy.net/2014/6/16/a-rule-of-thumb-for-strong-parameters
我遇到了同样的问题,但在我的情况下,我还必须更改:
到:
希望这对某人有所帮助。
如果有多个item和item_array这样的参数里面-
1 2  | Parameters {"item_1"=>"value 1","item_2"=> {"key_1"=>"value A1",  "key_2"=>["val B2","val C3"]} }  | 
我们在 
可以允许如下-
1  | params.permit(item_2: [:key_1, :key_2 => [] ])  | 
上面拯救了我的一天,可能对你也有帮助。