Question

Existe-t-il un moyen simple de renvoyer des données aux clients de services Web en JSON à l'aide de Rails ?

Était-ce utile?

La solution

La ressource Rails offre une interface RESTful pour votre modèle.Voyons.

Modèle

class Contact < ActiveRecord::Base
  ...
end

Itinéraires

map.resources :contacts

Manette

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

Cela vous donne donc une interface API sans avoir besoin de définir des méthodes spéciales pour obtenir le type de réponse requis

Par exemple.

/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

Autres conseils

Rails Monkeypatche la plupart des choses qui vous intéressent pour avoir un #to_json méthode.

De mémoire, vous pouvez le faire pour les hachages, les tableaux et les objets ActiveRecord, ce qui devrait couvrir environ 95 % des cas d'utilisation que vous pourriez souhaiter.Si vous avez vos propres objets personnalisés, il est trivial d'écrire les vôtres to_json méthode pour eux, qui peut simplement bloquer les données dans un hachage, puis renvoyer le hachage jsonisé.

Il existe un plugin qui fait exactement cela,http://blog.labnotes.org/2007/12/11/json_request-handling-json-request-in-rails-20/

Et d'après ce que j'ai compris, cette fonctionnalité est déjà dans Rails.Mais allez voir cet article de blog, il y a des exemples de code et des explications.

ActiveRecord fournit également des méthodes pour interagir avec JSON.Pour créer JSON à partir d'un objet AR, appelez simplement object.to_json.POUR créer un objet AR à partir de JSON, vous devriez pouvoir créer un nouvel objet AR, puis appeler object.from_json.autant que j'ai compris, mais cela n'a pas fonctionné pour moi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top