Atualizar:
Este problema não foi devidamente explorado. O verdadeiro problema está dentro render :json
.
A primeira colagem de código na questão original produzirá o resultado esperado. No entanto, ainda há uma ressalva. Veja este exemplo:
render :json => current_user
NÃO é o mesmo que
render :json => current_user.to_json
Ou seja, render :json
não chamará automaticamente o to_json
método associado ao objeto Usuário. Na verdade , se to_json
estiver sendo sobrescrito no User
modelo, render :json => @user
irá gerar o ArgumentError
descrito abaixo.
resumo
# 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
Tudo isso me parece bobo. Isso parece me dizer que render
não está realmente chamando Model#to_json
quando o tipo :json
é especificado. Alguém pode explicar o que realmente está acontecendo aqui?
Qualquer gênio que possa me ajudar com isso provavelmente pode responder à minha outra pergunta: Como construir uma resposta JSON combinando @ foo.to_json (opções) e @ bars.to_json (opções) no Rails
Questão original:
Eu vi alguns outros exemplos no SO, mas nenhum faço o que estou procurando.
Estou tentando:
class User < ActiveRecord::Base
# this actually works! (see update summary above)
def to_json
super(:only => :username, :methods => [:foo, :bar])
end
end
Estou ficando ArgumentError: wrong number of arguments (1 for 0)
em
/usr/lib/ruby/gems/1.9.1/gems/activesupport-2.3.5/lib/active_support/json/encoders/object.rb:4:in `to_json
Alguma ideia?
username
não é um método e um foo
e bar
não requerem métodos. Eu atualizei minha pergunta para mostrar onde o erro está acontecendo.
username
,foo
oubar
métodos esperar argumentos?