2012-08-28 5 views
0

J'ai un peu de problème. Je veux posts être la ressource par défaut lors de la navigation sur mon site (c'est un blog :)Rails racine ressource JSON

www.example.com/ #=> posts#index

www.example.com/15 #=> posts#show

etc. Cependant, je veux être en mesure d'ouvrir une API que je peux utiliser sur mon portfolio. Je peux utiliser le bloc respond_to format.json pour permettre ceci:

www.example.com/15.json

mais je ne peux pas comprendre comment la sortie d'action d'index JSON. Voici mes routes actuelles:

resources :posts, :path => '' 

Comment accéder à l'action d'index avec une extension JSON? Désolé si cela n'a aucun sens.

Répondre

1

Vous voulez dire: comment écrire une URL dans la barre d'adresse de votre navigateur pour obtenir l'index en JSON?

Il suffit de garder votre chemin d'index racine posts#indexmais permettent des appels d'API à /posts/all.json (vous devez coder vous-même l'action all, bien sûr) - vous pouvez également utiliser un sous-domaine api.example.com supplémentaire pour vos appels API et retour sortie uniquement JSON format pour eux, like here Dailymile fait.

aussi: Je pense qu'il vaut mieux pour une API pour avoir une idée mot comme /posts/<what I want from posts> au lieu d'un index vide / - vieux, bon dire que bon nom de fonction est la meilleure documentation de la fonction.

+0

Cheers! Je ne faisais que le tester et j'ai rencontré ce problème. A l'avenir, je peux juste ajouter une API. * Sous-domaine :) – andy

3

Tout d'abord, vous n'avez pas besoin de :path => '' partie. Pour faire un index des messages votre route racine, faites juste root to: "posts#index" (en utilisant la nouvelle syntaxe de hachage).

Afin de rendre une collection de messages dans votre action index, il suffit de faire respond_to bloc dans votre action de commande comme ceci:

def index 
    @posts = Post.all 
    respond_to do |format| 
    format.html # render index.html 
    format.json { render @posts } 
    end 
end 

Pour accéder à cette action index via JSON, il suffit de passer .json comme format. Vous pouvez également définir un format par défaut dans vos itinéraires, comme ceci:

resources :posts, defaults: { format: :json } 
+0

Cela ne fonctionnera pas car j'ai besoin 'www.example.com/1' pour aller à l'action' posts # show' – andy

+0

A travaillé comme un charme! C'est exactement ce que je cherchais, merci :) – ViniciusPires

Questions connexes