更新:
未正确探讨此问题。真正的问题在于render :json
。
原始问题中的第一个代码粘贴将产生预期的结果。但是,仍然需要注意。请参阅以下示例:
render :json => current_user
是不一样的
render :json => current_user.to_json
也就是说,render :json
不会自动调用to_json
与User对象关联的方法。实际上,如果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
这一切对我来说似乎很愚蠢。这似乎是在告诉我在指定类型时render
实际上并没有在调用。有人可以解释这里到底发生了什么吗?Model#to_json
: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
不需要的方法。我更新了问题以显示错误发生在哪里。
username
,foo
或bar
方法需要的参数?