如何在 Rails 中 POST/PUT 排列参数
How to POST/PUT array param in Rails
我的控制器方法非常适合我的 ERB 表单,但不接受数组作为 JSON 参数。我有一个名为 "style_ids" 的 id 数组,它从 JSON.
中删除
允许的参数:
params.require(:beer).permit(:name, :brewery_id, :style_ids => [])
从 ERB 发布时,它看起来像这样:
all params: {"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>”…”, "beer"=>{"name"=>"Amber", "style_ids"=>["", "1"], "brewery_id"=>"16"}, "commit"=>"Submit", "action"=>"update", "controller"=>"beers", "id"=>"213"}
permitted params: {"name"=>"Amber", "brewery_id"=>"16", "style_ids"=>["", "1"]}
当我通过 JSON 提交时,它看起来像这样:
params: {"id"=>"213", "name"=>"Amber", "style_ids"=>["1", "22"], "brewery_id"=>16, "action"=>"update", "controller"=>"beers", "beer"=>{"id"=>213, "name"=>"Amber", "brewery_id"=>16}}
Unpermitted parameters: id
permitted params: {"name"=>"Amber", "brewery_id"=>16}
我猜这与 Rails 在我的常规请求中在啤酒散列中显示 style_ids 有关。我做错了什么阻止它出现在我的 JSON 请求中? JSON 非常简单:{"id":213,"name":"Amber","style_ids":["1","22"],"brewery_id":16}
我已经阅读了很多关于此的文档,感觉我正在以正确的方式做这件事...希望我只是遗漏了一些东西。谢谢!
我终于弄明白了。 Rails 使用 wrap_parameters
所以我可以使用 {“name": “name”}
而不是 {“beer:{“name” : “name”}}
。默认情况下 Rails 包装来自模型 attribute_names
.
的任何内容
我的问题是 style_ids
是一个外部连接 table (has_and_belongs_to_many
),所以它不在 attribute_names
中。我通过将其添加到我的控制器顶部来修复此问题:wrap_parameters :beer, include: [:style_ids, :name, :brewery_id]
最终让我度过难关的 link:http://api.rubyonrails.org/classes/ActionController/ParamsWrapper.html
我的控制器方法非常适合我的 ERB 表单,但不接受数组作为 JSON 参数。我有一个名为 "style_ids" 的 id 数组,它从 JSON.
中删除允许的参数:
params.require(:beer).permit(:name, :brewery_id, :style_ids => [])
从 ERB 发布时,它看起来像这样:
all params: {"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>”…”, "beer"=>{"name"=>"Amber", "style_ids"=>["", "1"], "brewery_id"=>"16"}, "commit"=>"Submit", "action"=>"update", "controller"=>"beers", "id"=>"213"}
permitted params: {"name"=>"Amber", "brewery_id"=>"16", "style_ids"=>["", "1"]}
当我通过 JSON 提交时,它看起来像这样:
params: {"id"=>"213", "name"=>"Amber", "style_ids"=>["1", "22"], "brewery_id"=>16, "action"=>"update", "controller"=>"beers", "beer"=>{"id"=>213, "name"=>"Amber", "brewery_id"=>16}}
Unpermitted parameters: id
permitted params: {"name"=>"Amber", "brewery_id"=>16}
我猜这与 Rails 在我的常规请求中在啤酒散列中显示 style_ids 有关。我做错了什么阻止它出现在我的 JSON 请求中? JSON 非常简单:{"id":213,"name":"Amber","style_ids":["1","22"],"brewery_id":16}
我已经阅读了很多关于此的文档,感觉我正在以正确的方式做这件事...希望我只是遗漏了一些东西。谢谢!
我终于弄明白了。 Rails 使用 wrap_parameters
所以我可以使用 {“name": “name”}
而不是 {“beer:{“name” : “name”}}
。默认情况下 Rails 包装来自模型 attribute_names
.
我的问题是 style_ids
是一个外部连接 table (has_and_belongs_to_many
),所以它不在 attribute_names
中。我通过将其添加到我的控制器顶部来修复此问题:wrap_parameters :beer, include: [:style_ids, :name, :brewery_id]
最终让我度过难关的 link:http://api.rubyonrails.org/classes/ActionController/ParamsWrapper.html