2010-05-26 6 views
0

Je ne sais pas comment encadrer cette question (je suis encore en train d'envelopper ma tête autour de Rails).Rails de routage: comment mélanger "GET" et "PUT"

Essayons:

Dire que je voulais mettre en œuvre le côté utilisateur d'excellente Railscast de Ryan Bates sur nested models. (Il montre comment implémenter un sondage où vous pouvez ajouter et supprimer dynamiquement des questions et des réponses). Je veux le côté utilisateur: être capable de répondre aux questions et, pas dans le tutoriel, pouvoir ajouter des commentaires.

Il me semble que vous devez mettre en place une vue qui montre les questions et les réponses, permettre la sélection des réponses et la saisie des commentaires. Il devrait donc y avoir un moyen de montrer l'information, mais aussi de mettre à jour le modèle en entrée, n'est-ce pas? Je sais que je n'explique pas très bien cela. J'espère que vous comprenez ce que je veux dire.

S'agit-il simplement de mettre en place les bonnes routes? Ou y a-t-il un mojo de contrôleur qui doit arriver?

Répondre

1

« question » la façon typique de le faire dans Rails utilise le routage "ingénieux", qui mappe plus ou moins naturellement les actions CRUD standard aux méthodes en vous r contrôleur, en utilisant les verbes HTTP appropriés.

Dans le fichier routes (config/routes.rb), vous définissez les ressources et les actions souhaitées. Par exemple:

map.resources: questions,: has_many =>: répond

installerait un système de routage pour une question à réponses multiples, la cartographie des actions selon les conventions de Rails:

index: GET /questions/1/answers # list of answers for question id=1 
show: GET /questions/1/answers/2 # display answer 2 
new: GET /questions/1/answers/new # render form for new answer for question id=1 
create: POST /questions/1/answers # create a new answer for question id=1 
edit: GET /questions/1/answers/2/edit # render form for answer for question id=1 
update: PUT /questions/1/answers/2 # update answer 2 
destroy: DELETE /questions/1/answers/2 # delete answer 2 

Dans le contrôleur, vous créez des mappages de méthodes avec ces actions standard. Vous pouvez également créer vos propres méthodes et actions pour des choses qui ne tombent pas dans le paradigme CRUD (comme une recherche d'un champ AJomplifié de saisie semi-automatique, par exemple)

Espérons que cela répond à certaines de vos questions.

+0

Je suppose que ce que je suis confus (et cela vaut pour la réponse de Zepplock aussi), est-ce que je configure une série parallèle de contrôleurs et de vues pour le côté utilisateur de L'exemple d'enquête de Ryan, et si oui, cela ne va-t-il pas à l'encontre du paradigme DRY? Je veux essentiellement une version en lecture seule de l'application, où je peux voir et interagir avec le sondage, mais seulement pour répondre aux questions et ajouter des commentaires. Je n'arrive pas à comprendre cela. – thermans

+1

Si les vues sont par ailleurs identiques et que la seule différence est d'afficher certains éléments en fonction du rôle de l'utilisateur, il vaut mieux utiliser un seul contrôleur et afficher, et envelopper les sections "privées" avec un si 'déclaration. – zetetic

-6

Dans ASP.NET MVC, il existe deux méthodes de contrôleur avec du même nom mais avec des signatures de paramètre différentes. Une méthode est décorée avec un attribut qui lui dit de desservir les GET, l'autre est décorée avec un attribut qui lui indique de desservir les POST. La méthode GET affiche la vue, la méthode POST met à jour le modèle. Je suppose que cela fonctionne de la même manière dans Rails.

1

Vous avez besoin d'une ressource "question", d'une ressource "answer" et d'une ressource "comment". Vous devez également mettre en œuvre:

  • POST pour « réponse (ce qui est « créer » méthode dans le contrôleur) pour répondre à la question
  • POST pour « »(méthode créer « dans le contrôleur commentaire qui est ») pour créer commentaires
  • PUT pour la « question » (ce qui est « mise à jour » dans le contrôleur) pour « choisir » les réponses, ce qui est en train de changer efficacement l'état de la ressource
+0

OK, j'ai compris. Merci. Maintenant, comment puis-je y accéder dans les vues? – thermans

+0

Je suis simplement curieux: est-il seulement possible d'obtenir des routes POST/PUT/GET/DELETE si vous utilisez les méthodes CRUD intégrées dans le contrôleur? – Robbie

+0

@thermans: les vues auront des noms de correspondants: comme "create.html.erb". Vous pouvez les trouver dans le dossier "views". Je suggère de regarder la génération "échafaudage" qui générera modèle/vue/contrôleur pour vous avec toutes les opérations CRUD (y compris les routes) @Robbie: vous pouvez personnaliser un itinéraire pour activer/désactiver POST/PUT/GET/DELETE par ressource , ainsi que d'ajouter de nouveaux chemins (méthodes) aux routes existantes – Zepplock