¿Cómo anular to_json en Rails?
Este problema no fue explorado adecuadamente. El verdadero problema radica enrender :json
.
El primer código pegado en la pregunta original arrojará el resultado esperado. Sin embargo, todavía hay una advertencia. Ver este ejemplo:
render :json => current_user
esNO lo mismo que
render :json => current_user.to_json
Es decir,render :json
no llamará automáticamente alto_json
Método asociado con el objeto Usuario.De hecho, Sito_json
se anula en elUser
modelo,render :json => @user
generará elArgumentError
descrito abajo.
# 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
Todo esto me parece tonto. Esto parece estar diciéndome querender
en realidad no está llamandoModel#to_json
cuando escriba:json
está especificado. ¿Alguien puede explicar lo que realmente está pasando aquí?
Cualquier genio que pueda ayudarme con esto probablemente pueda responder a mi otra pregunta:Cómo construir una respuesta JSON combinando @ foo.to_json (opciones) y @ bars.to_json (opciones) en Rails
Pregunta original:He visto otros ejemplos en SO, pero ninguno hace lo que estoy buscando.
Lo estoy intentando:
class User < ActiveRecord::Base
# this actually works! (see update summary above)
def to_json
super(:only => :username, :methods => [:foo, :bar])
end
end
Me estoy poniendoArgumentError: wrong number of arguments (1 for 0)
en
/usr/lib/ruby/gems/1.9.1/gems/activesupport-2.3.5/lib/active_support/json/encoders/object.rb:4:in `to_json
¿Algunas ideas?