首先,我使用的是Rails 3.0.6和Ruby 1.9.2
我有一个带有两个不同动作的控制器,它们都应该返回一个json对象,但是具有不同的格式。因此,我重写了as_json方法,以我自己的格式编写JSON对象。问题是我不知道如何将params传递给as_json方法,因为它被Rails自动调用。
我的代码如下所示:
class MyController < ApplicationController
def action1
# my code
respond_to do |format|
# Render with :json option automatically calls to_json and this calls as_json
format.js { render :json => @myobjects }
end
end
def action2
# a different code
respond_to do |format|
# This action should return a JSON object but using a different format
format.js { render :json => @myobjects }
end
end
end
class MyModel < ActiveRecord::Base
def as_json(options = {})
# I would like to add a conditional statement here
# to write a different array depending on one param from the controller
{
:id => self.id,
:title => self.description,
:description => self.description || "",
:start => start_date1.rfc822,
:end => (start_date1 && start_date1.rfc822) || "",
:allDay => true,
:recurring => false
}
end
end
请注意,@ myobjects是一个对象的集合,其类是MyModel。
任何帮助将不胜感激。谢谢!
答案 0 :(得分:2)
在控制器中显式调用它并传递params。 as_json
将返回字符串并在字符串上调用as_json
返回自身。这是很常见的做法。
respond_to do |format|
# Render with :json option automatically calls to_json and this calls as_json
format.js { render :json => @myobjects.as_json(params) }
end