这个问题没有得到正确的探讨,真正的问题在于 render :json
。
原始问题中的第一个代码粘贴将产生预期的结果。然而,这里仍然有一个警告。看这个例子:
render :json => current_user
是 没有
render :json => current_user.to_json
也就是说,render :json
不会自动调用与 User 对象关联的 to_json
方法。如果 to_json
在 User
模型上被覆盖,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
。有人能解释一下这到底是怎么回事吗?
任何可以帮助我的 Genii 都可以回答我的另一个问题: 如何通过在 Rails 中组合@foo. to _ JSON (options)和@bar. 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
有什么想法吗?