Ruby:将表数据格式化为JSON

时间:2012-12-12 19:11:43

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

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

我创建了一个名为historical_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岁:)

1 个答案:

答案 0 :(得分:2)

只要render :json => ...返回一个可序列化为JSON的对象,代码中的HistoricalGem就可以正常工作(但AbcTable而不是json_timelines)(例如, ArrayHash)。

尝试类似这样的方法定义:

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

上面的代码段假设您的“historical_gems”表中包含“title”和“build_date”列;如果没有,请调整代码以反映您实际想要在JSON中表示的字段。