2011-03-01 10 views
6

Estoy usando Ruby on Rails 3 y me gustaría anular el método to_json.¿Cómo cambiar los valores que anulan el método 'to_json'?

En este momento utilizo el siguiente código a fin de evitar exportar información importante.

def to_json 
    super(
     :except => [ 
     :password 
     ] 
    ) 
    end 

Si quiero cambiar un valor utilizando ese método, cómo puedo hacerlo?

Por ejemplo, me gustaría aprovechar el nombre de usuario

:name => name.capitalize 

sobre la recuperación de este

@user.to_json 
+0

Problema similar aquí, podría ser útil. http://stackoverflow.com/questions/4703509/how-to-customize-the-to-json-method-in-rails3 – lashleigh

Respuesta

0

Utilice la opción :methods a to_json.

http://apidock.com/rails/ActiveRecord/Serialization/to_json

+0

Necesito un '' def a_json ... (en mi modelo) y no 'Konata. to_json (: methods =>: permalink) '(en el controlador o en cualquier otro lugar) – user502052

+0

Oh, ¿así que quieres sobrescribir el to_json predeterminado? Está bien, creo. – rmk

+0

Probé varias pruebas, pero siempre recibía errores. Por favor, ¿puedes hacerme un ejemplo de trabajo? – user502052

10

Si desea render :json => @user en el controlador de Rails 3, puede anular as_json en el modelo:

class User < ActiveRecord::Base 
    def as_json(options={}) 
    result = super({ :except => :password }.merge(options)) 
    result["user"]["name"] = name.capitalize 
    result 
    end 
end 

Aquí es un buen post sobre el differences between to_json and as_json.

+1

Fwiw, al llamar 'user.to_json', en Rails 3.1.3, yo estaba viendo el' 'as_json' recibir las negativas para el argumento opciones, por lo que añade'opciones || = {}' como la primera línea de mi método 'as_json' personalizado. –

+0

Esto funciona en la aplicación 3.0 también. ¡Gran respuesta, elíjala! – pjammer

Cuestiones relacionadas