2010-05-28 6 views
1

J'expérimente Rails et je me demandais ce qui était nécessaire pour autoriser/ajouter la prise en charge des requêtes JSON?Ajout de la prise en charge JSON à l'application Rails

J'ai une installation de vanille de Rails 2.3.5 et l'échafaudage par défaut semblent fournir un soutien pour HTML & XML demandes mais pas JSON.

class EventsController < ApplicationController 
    # GET /events 
    # GET /events.xml 
    def index 
    @events = Event.all 

    respond_to do |format| 
     format.html # index.html.erb 
     format.xml { render :xml => @events } 
    end 
    end 

    # GET /events/1 
    # GET /events/1.xml 
    def show 
    @event = Event.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.xml { render :xml => @event } 
    end 
    end 

... 

Je suis nouveau à cela, mais il semblerait que si je aurais besoin d'ajouter une ligne de format dans chaque méthode le long des lignes de:

format.js { render :js => @event.json } 

ne pouvait-il être fait automatiquement? peut-être y a-t-il un modèle quelque part que je dois mettre à jour ... ou un drapeau que je peux mettre? Ou peut-être, et très probablement, j'ai raté le bateau entièrement?!?

Répondre

3

vous faites:

format.json {render :json=>@event} 

Cela va rendre le activerecord par défaut JSON pour le modèle

L'option de la facilité d'utilisation est que vous pouvez écrire une méthode privée qui prend l'objet de format et un objet rendre, puis, en fonction du format, rend différentes choses. Exemple:

class MyController<ApplicationController 
    def show 
    @event=Event.find(params[:id]) 
    respond_to do {|format| myRenderer(format,@event)} 
end 
    ... 
    private 
    def myRenderer(fmt,obj) 
    fmt.json {render :json=>obj} 
    fmt.html 
    fmt.xml {render :xml=>obj} 
end 
+0

Alors c'est tout? il suffit d'ajouter cette ligne et ... presto!?! existe-t-il un moyen d'obtenir le cadre pour inclure les lignes '.json' dans chaque bloc' respond_to' lorsque l'échafaudage est créé? * digère toujours la 2ème partie de votre commentaire sur un myRenderer personnalisé ... * – Meltemi

+0

Vous pouvez l'ajouter au template du générateur d'échafaudage par défaut. La deuxième partie de ma réponse est juste une chose de facilité d'utilisation. – Maz

Questions connexes