Обновить:
Эта проблема не была изучена должным образом. Настоящая проблема кроется внутри 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
Любые идеи?
username
,foo
илиbar
методы ожидают аргументы?