2012-01-29 9 views
10

Tengo un objeto en Rails que tiene los atributos A, B, C, D y E. Al pasar este objeto de vuelta al lado del cliente a través de un objeto JSON, cómo ¿Puedo decirle al controlador de rieles que solo incluya los atributos A y D en el objeto JSON?Especificación de atributos de un objeto Rails pasado a un objeto JSON

Dentro de mi controlador de Usuarios, mi código es el siguiente: trabaja

@user = User.find(params[:id]) 

    respond_to do |format| 
     format.html 
     format.json { render :json => @user} 
    end 

Este código, sin embargo, el objeto JSON que se devuelve contiene todos los atributos del objeto @user. ¿Cómo puedo limitar los atributos que están incluidos en el objeto JSON antes de que se envíe algo al cliente?

ACTUALIZACIÓN: lucapette proporciona algunos buenos antecedentes sobre lo que está sucediendo detrás de las escenas. Puesto que hay momentos en los que probablemente me quiero todos los atributos devueltos, terminé usando el siguiente código:

format.json { render :json => @user.to_json(:only => ["id"])} 

Respuesta

15
render :json => @user 

llamarán to_json en el objeto @user. Y el método to_json usará el método as_json para hacer su trabajo. Por lo tanto, puede anular fácilmente el as_json para pasar solo lo que desea a los clientes. Al igual que en el siguiente:

def as_json options={} 
    { 
    attr1: attr1, 
    attr2: attr2 
    } 
end 
+3

Gracias, lucapette. Después de leer su respuesta, investigué los métodos to_json y as_json. Luego, modifiqué mi código de la siguiente manera: format.json {render: json => @ user.to_json (: only => ["id"])}. Parece que debe haber algún código superfluo pero no pude encontrar otra forma de hacerlo funcionar. – Vee

+0

sí, también puede usar las opciones. Funciona bien de esa manera también. Realmente depende de la situación que tengas que enfrentar. – lucapette

Cuestiones relacionadas