1

我正在尝试创建一个时间线,其中包含一个供用户输入新事件的表单。我决定使用http://timeline.verite.co/中的时间线- 我可以为每个用户创建一个表单来输入新事件,并将该事件保存到数据库中没有问题。但是,我无法弄清楚的是:

a) 从数据库中获取数据并将其转换为时间线会满意的正确 JSON 格式 - 我不知道从哪里开始!我是否需要使用与 JSON 属性相同的名称来命名数据库中的列,例如“标题”?然后我如何将其转换为 JSON?

b) 我如何动态生成 JSON 文档?该代码需要一个指向包含数据的 JSON 文档的链接。

这是我可以弄清楚如何做到这一点的唯一方法 - 就好像我要为每个用户生成一个 JSON 文档并插入每个新事件,然后从中读取,那么肯定存在一些 JSON 文档更容易的安全问题由不拥有它的人下载,而不是数据库中的数据?

任何帮助或指示将不胜感激 - 我对 Rails 很陌生,还没有真正接触过 JSON!谢谢你。

如果有帮助,时间线所需的数据格式如下:

{
  "timeline":
  {
      "headline":"The Main Timeline Headline Goes here",
      "type":"default",
      "text":"<p>Intro body text goes here, some HTML is ok</p>",
      "asset": {
          "media":"http://yourdomain_or_socialmedialink_goes_here.jpg",
          "credit":"Credit Name Goes Here",
          "caption":"Caption text goes here"
      },
      "date": [
          {
              "startDate":"2011,12,10",
              "endDate":"2011,12,11",
              "headline":"Headline Goes Here",
              "text":"<p>Body text goes here, some HTML is OK</p>",
              "tag":"This is Optional",
              "asset": {
                  "media":"http://twitter.com/ArjunaSoriano/status/164181156147900416",
                  "thumbnail":"optional-32x32px.jpg",
                  "credit":"Credit Name Goes Here",
                  "caption":"Caption text goes here"
              }
          }
      ],
      "era": [
          {
              "startDate":"2011,12,10",
              "endDate":"2011,12,11",
              "headline":"Headline Goes Here",
              "text":"<p>Body text goes here, some HTML is OK</p>",
              "tag":"This is Optional"
          } 

        ]
    }
}
4

3 回答 3

2

使用#to_json不是一个真正的选择,太复杂了。

尝试将 JSON 模板与 JBuilder 一起使用(请参阅https://github.com/rails/jbuilder)。

您甚至可以使用部分和缓存,就像普通的 ERB 视图一样。

于 2012-10-11T12:02:36.697 回答
0

如果您将 json 对象转换为字符串并作为 blob 类型存储在数据库中,那么在检索时您可以使用

ActiveSupport::JSON.decode(VALUE)

将字符串转换为 json

于 2012-10-11T12:11:48.163 回答
0

尝试使用Rabl。它可以让您在 Rails 应用程序中使用视图导出简单和复杂的 json 结构。它非常容易设置。

于 2013-10-09T19:15:07.603 回答