Update:
Эта проблема не была должным образом изучена. Реальная проблема заключается в 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
. Может кто-нибудь объяснить, что здесь происходит?
Любые гении, которые могут мне помочь, могут, вероятно, ответить на мой другой вопрос: Как построить ответ JSON, объединив @foo.to_json (параметры) и @bars.to_json (параметры ) в Rails
Оригинальный вопрос:
Я видел некоторые другие примеры на 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
Любые идеи?