2011-02-14 28 views
9

Tengo una matriz de objetos modelo que tienen un método owner. Este método necesita un parámetro para pasarlo a trabajar. Necesito serializar los objetos modelo a json e incluir el valor del método propietario.Rails to_json: métodos que tienen los parámetros

¿Cómo hago para pasar el parámetro en el método to_json Actualmente uso el

objects.to_json(:methods => :owner) 

incluir el método propietario, pero como yo no estoy pasando el parámetro no funciona.

+0

¿Cómo está utilizando el JSON? ¿Por qué no puedes pasar los parámetros a #to_json? –

Respuesta

19

NOTA: observación se aplica a Rails 2.3, no han probado este w/Rails 3.

las que no creo que pueda hacer esto w/el camino a_json obras, por lo que yo creo que hay dos opciones:

1.Prepare sus objetos llamando a un método para esconder el valor correcto en una variable que el método 'propietario' luego lee durante la llamada a_json.

2.Overriding as_json en su modelo:

def as_json(options = {}) 
    json = super(options) 
    json['owner'] = owner(options[:param_for_owner]) 
    json 
end 

Luego, en su llamada a_json sólo tiene que pasar en: param_for_owner:

objects.to_json(:param_for_owner => 'foo') 

Tenga en cuenta que cuando se inyecta su valor dependerá de cómo su ActiveRecord :: Base.include_root_in_json está configurado.

+4

No es exactamente hermoso, pero funciona. –

+0

Si desea utilizar este método de sustitución as_json para una clase en particular, pero no necesita incluir 'owner' cada vez, puede agregar "if owner [: param_for_owner]" después de la línea json ['owner'] ... para hacerlo opcional. –

+0

Está bien: si los métodos necesitan parámetros, significa que la representación JSON del objeto depende de esos parámetros, por lo que es normal tener un comportamiento personalizado. De lo contrario, podría crear otro método que llame al método 'as_json'. P.ej. 'object.as_json_with_owner (owner)' –

Cuestiones relacionadas