我需要根据我的数据创建一个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 \ “\ ”资源\“:\ ”资源1 \“}”, “{\” 标题\ “:\” ikincii \ “\ ”启动\“:\ ”2012-12-27T10:25:00Z \“,\ ”端\“:\” 2012-12-27T10:25: 00Z \ “\ ”资源\“:\ ”资源2 \“}”, “{\”title \“:\”b da 儿子\”,\ “启动\”:\ “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' } ]
我该怎么做?
感谢。
答案 0 :(得分:1)
尝试将此添加到相应的控制器:
respond_to do |format|
format.html
format.js { render json: @events }
end
另外,在我的Event模型中,我用这个覆盖了默认的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
答案 1 :(得分: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建设者致力于这类任务。