Pregunta

¿Existe una manera sencilla de devolver datos a clientes de servicios web en JSON utilizando Rails?

¿Fue útil?

Solución

El recurso Rails proporciona una interfaz RESTful para su modelo.Vamos a ver.

Modelo

class Contact < ActiveRecord::Base
  ...
end

Rutas

map.resources :contacts

Controlador

class ContactsController < ApplicationController
  ...
  def show
    @contact = Contact.find(params[:id]

    respond_to do |format|
      format.html 
      format.xml {render :xml => @contact}
      format.js  {render :json => @contact.json}
    end
  end
  ...
end

Esto le brinda interfaces API sin la necesidad de definir métodos especiales para obtener el tipo de respuesta requerida.

P.ej.

/contacts/1 # Responds with regular html page

/contacts/1.xml # Responds with xml output of Contact.find(1) and its attributes

/contacts/1.js # Responds with json output of Contact.find(1) and its attributes

Otros consejos

Rails parchea la mayoría de las cosas que te interesarían tener #to_json método.

En lo que se me ocurre, puedes hacerlo para hashes, matrices y objetos ActiveRecord, que deberían cubrir aproximadamente el 95% de los casos de uso que puedas desear.Si tiene sus propios objetos personalizados, es trivial escribir los suyos propios. to_json método para ellos, que puede simplemente bloquear datos en un hash y luego devolver el hash jsonizado.

Hay un complemento que hace precisamente esto,http://blog.labnotes.org/2007/12/11/json_request-handling-json-request-in-rails-20/

Y por lo que tengo entendido, esta funcionalidad ya está en Rails.Pero ve a ver esa publicación de blog, hay ejemplos de código y explicaciones.

ActiveRecord también proporciona métodos para interactuar con JSON.Para crear JSON a partir de un objeto AR, simplemente llame a object.to_json.PARA crear un objeto AR a partir de JSON, debería poder crear un nuevo objeto AR y luego llamar a object.from_json.Por lo que tengo entendido, pero esto no funcionó para mí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top