Как переопределить to_json в Rails?
Эта проблема не была должным образом исследована. Настоящая проблема заключается в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
Есть идеи?