Rails 4未授权的数组参数
我在我的模型中有一个数组字段,我试图更新它。
我强有力的参数方法如下
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
然而,每当我提交更新的post,在我的发展日志中我看到
Unpermitted parameters: categories
通过的参数是
Parameters: {"utf8"=>"✓", "authenticity_token"=>"auth token", "id"=>"10", "post"=>{"name"=>"Toni Mitchell", "email"=>"eileen_hansen@hayetokes.info", "categories"=>",2"}}
我想这与事实有关,因为一切看起来都很好,属性categories
是一个数组。 再一次,我可能是错的。 那么,我的代码出了什么问题?为什么在明确允许的情况下不让我保存类别字段呢? 谢谢。
尝试这个
params.require(:post).permit(:name, :email, :categories => [])
(无视我的意见,我不认为这很重要)
在导轨4中,
params.require(:post).permit(:name, :email, {:categories => []})
允许的标量types是String
, Symbol
, NilClass
, Numeric
, TrueClass
, FalseClass
, Date
, Time
, DateTime
, StringIO
, IO
, ActionDispatch::Http::UploadedFile
和Rack::Test::UploadedFile
。
要声明参数中的值必须是允许的标量值的数组,则将该键映射到空数组:
params.permit(:id => [])
这就是Github上强大的参数文档所说的:
params.require(:post).permit(:name, :email, :categories => [])
我希望这能为你解决。
我有同样的问题,但在我的情况下,我也要改变:
<input type="checkbox" name="photographer[attending]" value="Baku">
至:
<input type="checkbox" name="photographer[attending][]" value="Baku">
希望这是帮助别人。
我有同样的问题,但只是添加数组许可是不够的。 我也必须添加types。 这条路:
params.require(:transaction).permit(:name, :tag_ids => [:id])
我不确定这是否是完美的解决scheme,但在此之后,“未经许可的参数”日志消失。
我从这个出色的文章中发现了这个解决scheme的提示: http : //patshaughnessy.net/2014/6/16/a-rule-of-thumb-for-strong-parameters