1

我需要为我的数据创建一个 json 数组。但在我的数据模型中,有些字段是不必要的,有些字段名称需要为 json-array 更改。因此,我创建了一个简单的函数来将一个对象转换为我需要使用的 json 格式:

  def testMethod
    {title: self.title, start: self.start_date, end: self.end_date, resource: Resource.find(self.resource_id).name}.to_json
  end

所以这个 json 对象的输出是:

{:title=>"Test", :start=>Thu, 27 Dec 2012 10:25:00 UTC +00:00, :end=>Thu, 27 Dec 2012 10:25:00 UTC +00:00, :resource=>"Resource1"}

但是当我使用以下循环迭代所有对象时:

@calJson   = []
@calendars.each do |cal|
    @calJson.push(cal.testMethod)
end

我会有这个无用的字符串:

["{\"标题\":\"测试\",\"开始\":\"2012-12-27T10:25:00Z\",\"结束\":\"2012-12-27T10:25 :00Z\",\"resource\":\"Resource1\"}", "{\"title\":\"ikincii\",\"start\":\"2012-12-27T10:25:00Z \",\"end\":\"2012-12-27T10:25:00Z\",\"resource\":\"Resource2\"}", "{\"title\":\"b da son \",\"开始\":\"2012-12-27T10:27:00Z\",\"结束\":\"2012-12-27T10:27:00Z\",\"资源\":\ "资源 1\"}"]

而我想要这样的东西:

[ {标题:'午餐 12.15-14.45',开始:新日期(y,m,d,12,15),结束:新日期(y,m,d,14,45),

              resource: 'resource1'
          },              
          {
              title: 'Meeting',
              start: new Date(y, m, d, 10, 30),
              end: new Date(y, m, d+4, 11, 00),

              resource: 'resource1'
          } ]

我该怎么做?

谢谢。

4

2 回答 2

1

尝试将其添加到相应的控制器中:

respond_to do |format|
  format.html
  format.js { render json: @events }
end

另外,在我的事件模型中,我用这个覆盖了默认的 as_json 方法:

def as_json(options = {})
{
  :id => self.id,
  :title => self.name,
  :description => self.description || "",
  :start => starts_at.rfc822,
  :end => ends_at.rfc822,
  :allDay => self.all_day
}
end
于 2012-12-27T13:10:09.933 回答
1

直接回答你的问题:

 def testMethod
  {title: self.title, start: self.start_date, end: self.end_date, resource: Resource.find(self.resource_id).name}
 end

 @calJson = @calendars.each_with_object([]) {|cal, array| array << cal.testMethod }.to_json

但是您有更好的选择:json 构建器专门用于此类任务。

于 2012-12-27T13:15:37.723 回答