Actualizar:
Este problema no se exploró correctamente. El problema real está dentro render :json
.
El primer pegado de código en la pregunta original producirá el resultado esperado. Sin embargo, todavía hay una salvedad. Vea este ejemplo:
render :json => current_user
NO es lo mismo que
render :json => current_user.to_json
Es decir, render :json
no llamará automáticamente al to_json
método asociado con el objeto Usuario. De hecho , si to_json
se anula en el User
modelo, render :json => @user
generará lo que se ArgumentError
describe a continuación.
resumen
# 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 una tontería. Esto parece decirme que en render
realidad no está llamando Model#to_json
cuando :json
se especifica el tipo . ¿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 crear una respuesta JSON combinando @ foo.to_json (opciones) y @ bars.to_json (opciones) en Rails
Pregunta original:
He visto algunos 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 poniendo ArgumentError: 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?
username
no es un método y un foo
y bar
no requieren métodos. Actualicé mi pregunta para mostrar dónde está ocurriendo el error.
username
,foo
obar
espera argumentos?