【问题标题】:Post to rails with json field使用 json 字段发布到 rails
【发布时间】:2018-12-08 03:06:01
【问题描述】:

我正在尝试使用 Postgres 和 Rails 提供的新 json 字段。到目前为止,我所做的只是生成这个脚手架并出于测试原因禁用 CSRF 令牌:

 rails generate scaffold Shipping name content:json

我的目标是发送这样的数据:

 curl -vX POST https://myserver.com/shipping -d '{"shipping": { "name": "test", "content" : ["test","hello"] }}' --header "Content-Type: application/json"

这确实接受名称名称,但不接受内容。是否有适当的方法来格式化内容,还是有更多问题?

【问题讨论】:

  • 这接受名字,但不接受内容,你可以在请求的时候添加日志吗?

标签: ruby-on-rails json ruby postgresql curl


【解决方案1】:

Rails 将过滤掉未明确允许的“标量”参数。我敢打赌你尝试了一个普通的字符串值并且一切正常,但是一旦你发送了一个数组或对象,事情就不起作用了。

要让事情正常工作,只需在您的 ShippingsController 中更新原始的 shipping_params 方法:

def shipping_params
  params.require(:shipping).permit(:name, content: {})
end

顺便看看ActionController::Parameters API docs。我相信您最终会为模型添加更多属性,并且也需要为这些属性添加键。

值得一提的是:您可能会在参考文档中遇到类似的permit! 方法。如果您 a) 使用模型的属性做出任何授权决定,并且 b) 允许您不信任的人使用您的 API,请小心。您要做的最后一件事是让某人在类似用户的模型上将 is_admin 列设置为 true。

【讨论】:

  • 谢谢!我猜当您不必关心许可证时,我的思绪又回到了 Rails 3 次。我不能接受 json 数组 atm,但 {"data" => ["test","ahoy"]} 有效。现在对我来说已经足够了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-19
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多