2010-03-15 7 views
6

Al usar :methods en to_json, ¿hay alguna manera de cambiar el nombre de la clave? Estoy tratando de reemplazar la identificación real con una versión base62 de ella, y quiero que el valor de base62_id tenga la clave :id.usando una clave diferente para to_json: métodos

@obj.to_json(
    :except => :id 
    :methods => :base62_id 
) 

he tratado de hacer

@obj.to_json(
    :except => :id 
    :methods => { :id => :base62_id } 
) 

pero eso no funcionó.

¿Algún consejo?

Respuesta

2

El serializador to_json utiliza el nombre del método como la clave para la serialización. Por lo tanto, no puede usar la opción methods para esto. Desafortunadamente to_json método doesn t accept parámetro block`, de lo contrario se podría haber hecho algo similar a

@obj.to_json(:except => :id) {|json| json.id = base62_id } 

Así que nos deja con un corte feo como:

def to_json(options={}) 
    oid, self.id = self.id, self.base62_id(self.id) 
    super 
ensure 
    self.id = oid 
end 

Ahora to_json devolverá el resultado esperado .

Cuestiones relacionadas