web-dev-qa-db-fra.com

Rendre JSON au lieu de HTML par défaut?

J'essaie de dire Rails 3.2 qu'il devrait rendre JSON par défaut, et lancer HTML complètement comme ceci:

respond_to :json    

def index
  @clients = Client.all
  respond_with @clients
end

Avec cette syntaxe, je dois ajouter .json à l'URL. Comment puis-je y parvenir?

40
trnc

Vous pouvez modifier votre routes.rb fichiers pour spécifier le format par défaut

routes.rb

resources :clients, defaults: {format: :json}

Cela modifiera le format de réponse par défaut pour l'ensemble de votre clients_controller

79
rogeliog

Si vous n'avez pas besoin que RESTful réponde dans votre action d'index, rendez simplement votre réponse xml directement:

def index
  render json: Client.all
end
10
jdoe

Ce modèle fonctionne bien si vous souhaitez utiliser les mêmes actions de contrôleur pour les deux. Créez une version Web comme d'habitude, en utilisant: html comme format par défaut. Ensuite, placez l'api sous un chemin et définissez: json comme valeur par défaut.

Rails.application.routes.draw do

  resources :products

  scope "/api", defaults: {format: :json} do
    resources :products
  end

end
9
Mark Swardstrom