你得到
ArgumentError: wrong number of arguments (1 for0),因为
to_json需要重写一个参数的
options哈希值。
def to_json(options) ...end
的更详细的解释to_json
,as_json
和渲染:
在ActiveSupport 2.3.3中,
as_json添加了解决您遇到的问题的方法。json 的 创建 应与json的 呈现 分开。
现在,随时
to_json可以在对象
as_json上调用,调用来创建数据结构,然后使用将该哈希编码为JSON字符串
ActiveSupport::json.enpre。所有类型均会发生这种情况:对象,数字,日期,字符串等(请参阅ActiveSupport代码)。
ActiveRecord对象的行为方式相同。有一个默认
as_json实现,该实现创建一个包含所有模型属性的哈希。
您应该
as_json在Model中重写以创建所需的JSON结构。
as_json,就像旧的一样
to_json,采用选项哈希,您可以在其中指定要声明式包含的属性和方法。
def as_json(options) # this example ignores the user's options super(:only => [:email, :handle])end
在您的控制器中,
render :json => o可以接受字符串或对象。
如果是字符串,则将其作为响应主体传递,如果是对象,则将其作为响应主体
to_json进行调用,并
as_json如上所述触发。
因此,只要您的模型正确地用
as_json覆盖(或不覆盖)表示,那么用于显示一个模型的控制器代码应如下所示:
format.json { render :json => @user }这个故事的寓意是: 避免to_json
直接打电话,允许render
为您这样做。如果您需要调整JSON输出,请致电as_json
。
format.json { render :json => @user.as_json(:only => [:username], :methods => [:avatar]) }


