2011-03-22 10 views
18

¿Cuál es la mejor manera si me gustaría volver solamente: Identificación y: campos de nombre en JSONJSON filtro de render en Rails

hasta ahora tengo:

format.json { render :json => @contacts.map(&:attributes) , :only => ["id"]} 

Pero el atributo "nombre" no funciona en la sección: solo, ya que no es una columna en la base de datos (se define en el modelo como nombre + apellido)

¡Gracias!

Respuesta

29

Puede pasar a :methods a_json/as_json

format.json do 
    render :json => @contacts.map { |contact| contact.as_json(:only => :id, :methods => :name) } 
end 

Alternativamente, usted puede simplemente construir un hash manualmente

format.json do 
    render :json => @contacts.map { |contact| {:id => contact.id, :name => contact.name} } 
end 

Ver: http://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html#method-i-as_json

+0

Lo siento, no funciona. Solo muestra id attr en hash – montrealmike

+0

¿Has probado el ejemplo modificado más detallado? – lebreeze

+0

Hemos actualizado nuestro comentario al mismo tiempo. Ahora obtengo: [{"contact": {"name": "Executor From_wizard", "id": null}}] pero necesito [{"name": "Executor From_wizard", "id": "1"} ] – montrealmike

32

Rails 3 soportes siguientes opciones de filtro. tan simple como es

respond_to do |format| 
    format.json { render json: @contacts, :only => [:id, :name] } 
end 
+6

en realidad, ya que el nombre es un método, creo que se representará json: @contacts, only: [: id], methods: [: name] – montrealmike

Cuestiones relacionadas