【问题标题】:Rails Generate JSON for API POSTRails 为 API POST 生成 JSON
【发布时间】:2016-04-02 13:29:04
【问题描述】:

我正在关注一些 API 文档,作为帖子的一部分,我需要生成一些这种格式的 JSON:

{
 "panelist": {
 "email_address": "test@example.com",
 "gender": "m",
 "postal_code": "12345",
 "year_of_birth": 1997,
 “variables”: [1000,1001]
 }
}

在 Rails 中生成它的最佳方法是什么(我没有Panelist 模型,而这些东西大部分都存储在我的Appuser 模型中,所以gender 实际上是@appuser.gender)。

过去我只是做过类似的事情

params = {
 "gender" => "m",
 "postal_code" => "12345"
}

然后在我的请求中set_form_data:

http = Net::HTTP.new(uri.host, uri.port)

request = Net::HTTP::Post.new(uri.request_uri)
request.set_form_data(params)

response = http.request(request)

但是panelist 中的嵌套参数让我失望了。

我确实尝试过使用to_json 来简单地做到这一点:

appuser = { "panelist" => { "email" => "test@example.com", "zip" => "12345" } }
appuser.to_json
 => "{\"panelist\":{\"email\":\"test@example.com\",\"zip\":\"12345\"}}" 

但似乎我或多或少只是对 json 进行硬编码。我想我可以做到,但感觉可能有更简单的方法。

【问题讨论】:

  • 您打算多久发送一次这种格式的数据?如果不止一次,我会考虑为它制作模型。
  • 很常见。我会研究新模型。由于数据已经存在于 appuser 模型中,因此我最初并不打算这样做。
  • 如果这个模型是 AppUser 模型的一个子集,那么 AppUser 可以有一个返回其中之一的方法。然后你只需调用 AppUser.to_special_model.to_json
  • 啊,好主意! :)

标签: ruby-on-rails json


【解决方案1】:

有一个帮助库“json”,它为每个对象添加了一个“to_json”方法。只需为此添加一个需求,然后调用 params.to_json。

How to convert a ruby hash object to JSON?

【讨论】:

  • 我不确定是否要为此覆盖它 - 因为我实际上需要 to_json 方法通过我的 Backbone 前端在我的应用程序中进行交互。这件作品仅用于与外部服务交互...
  • 它只将方法添加到自己尚未定义的对象中。如果您有一个模型声明了自己的“to_json”,那么在您调用它时仍然会使用它。
  • 玩了一会儿,并使用to_jsoncall 添加了一个编辑
猜你喜欢
  • 1970-01-01
  • 2015-10-05
  • 1970-01-01
  • 1970-01-01
  • 2014-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
相关资源
最近更新 更多