更新:
这个问题并没有得到很好的研究。真正的问题在于render :json
。
原始问题中的第一个代码段将产生预期的结果。但是仍然有一个警告。看这个例子:
render :json => current_user
不能与
render :json => current_user.to_json
即render :json
不会自动调用与User对象相关联的to_json
方法。实际上,如果User
模型上被覆盖了to_json
,那么render :json => @user
将生成下面描述的ArgumentError
。
摘要
# works if User#to_json is not overridden
render :json => current_user
# If User#to_json is overridden, User requires explicit call
render :json => current_user.to_json
对我来说,这一切似乎都很傻。它好像在告诉我,在指定类型为:json
时,render
实际上没有调用Model#to_json
。有人能解释一下这里到底发生了什么吗?
任何聪明的人如果可以帮助我解决这个问题,可能也能回答我的另一个问题:如何在Rails中通过组合@foo.to_json(options)
和 @bars.to_json(options)
来构建 JSON 响应
原始问题:
我在 SO 上看到了一些其他的例子,但它们都不是我想要的。
我正在尝试:
class User < ActiveRecord::Base
# this actually works! (see update summary above)
def to_json
super(:only => :username, :methods => [:foo, :bar])
end
end
我在代码中遇到了 ArgumentError: wrong number of arguments (1 for 0)
的错误提示。/usr/lib/ruby/gems/1.9.1/gems/activesupport-2.3.5/lib/active_support/json/encoders/object.rb:4:in `to_json
有什么想法吗?
username
、foo
或bar
方法中是否有需要参数的? - Jonathan Julianusername
不是一个方法,而foo
和bar
也不需要方法。我更新了我的问题以显示错误发生的位置。 - maček