- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我的 Controller 方法非常适合我的 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
是一个外部连接表(has_and_belongs_to_many
),所以它不在 attribute_names
中。我通过将其添加到我的 Controller 顶部来修复此问题:wrap_parameters :beer, include: [:style_ids, :name, :brewery_id]
最终帮助我完成此操作的链接:http://api.rubyonrails.org/classes/ActionController/ParamsWrapper.html
关于ruby-on-rails - 如何在 Rails 中 POST/PUT 数组参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32471487/
我是一名优秀的程序员,十分优秀!