更新:
この問題は適切に調査されていません。本当の問題は内にありますrender :json
。
元の質問の最初のコードを貼り付けると、期待どおりの結果が得られます。ただし、まだ注意が必要です。この例を見てください:
render :json => current_user
と同じではありません
render :json => current_user.to_json
つまり、Userオブジェクトに関連付けられrender :json
た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
これはすべて私にはばかげているようです。これは、タイプが指定されているときrender
に実際には呼び出されていないことを私に言っているようです。誰かがここで実際に何が起こっているのか説明できますか?Model#to_json
:json
これで私を助けることができるどんなgeniiもおそらく他の私の質問に答えることができます: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
メソッドのいずれかに引数が必要ですか?