【问题标题】:Ruby: Formatting table data to JSONRuby:将表格数据格式化为 JSON
【发布时间】:2014-02-03 19:23:53
【问题描述】:

我正在尝试为开源项目的错误和更新制定时间表。我是 ruby​​ 新手,但我正在逐渐获得一些经验。

我创建了一个名为history_gems 的表,模型中包含以下代码:

class HistoricalGem < ActiveRecord::Base
  attr_accessible :build_date, :version
  belongs_to :ruby_gem, :foreign_key => :gem_id
end

我正在使用一个 JS 插件 (http://almende.github.com/chap-links-library/js/timeline/doc),它需要具有两个字段名称的对象(日期的“开始”和“内容” ' 为标题)在 JSON 数组中使用 JS 显示时间线。

我相信我必须在控制器中做这样的事情,它定义了我的时间线方法来呈现 JSON:

def timelinem
@name = params[:id]
@rpm = AbcTable.find_by_name(@name)
respond_to do |format|
  format.json { render :json => @rpm.json_timelines }
   end
end

那么我可能不得不在我的模型中定义一个 'json_timelines' 方法,可能类似于:

def json_timelines(gems = [])
    dates = []
    gem_id.each { |p|
        gems << p
        dates << p.build_date(gems)
    end
   }
 end

我只是从 RoR 开始,即使经过几个小时的指南、教程和调试,我也无法将这段代码放在一起。任何人都可以帮助我吗?我不认为我做得对。

顺便说一句,如果我忽略了一些明显的事情,请不要太苛刻,我才 16 岁 :)

【问题讨论】:

    标签: ruby-on-rails ruby json chap-links-library


    【解决方案1】:

    只要json_timelines 返回一个可序列化为 JSON 的对象(例如,ArrayHash )。

    为您的方法定义尝试这样的事情:

    def json_timelines(gems = [])
      gems.map do |g|
        {
          :content => g.title,
          :date    => g.build_date
        }
      end
    end
    

    上面的 sn-p 假设您的“historical_gems”表有“title”和“build_date”列;如果不是,请调整代码以反映您实际希望在 JSON 中表示的字段。

    【讨论】:

    • 谢谢!我可以将 json 渲染到特定文件,以便我可以从视图中请求它,并且该请求会调用另一种方法,将生成的 JSON 放入 /stats/gemname/jsonfile.json ?有没有办法使用 json_timelines 函数本身来实现这一点?