Как переопределить 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

Есть идеи?

Ответы на вопрос(4)

Ваш ответ на вопрос