gpt4 book ai didi

ruby-on-rails - 如何在 Rails 中 POST/PUT 数组参数

转载 作者:数据小太阳 更新时间:2023-10-29 08:03:28 25 4
gpt4 key购买 nike

我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com