2009-11-02 4 views
1

Je ne comprends vraiment pas pourquoi c'est si difficile ... J'ai un peu d'expérience avec d'autres frameworks mvc, mais les rails toujours entendus étaient les plus faciles à coder .... maintenant je ne peux même pas accéder à mon contrôleur méthodes si je veux.Aide avec les voies de rails

J'utilisé échafaudage creat « étudiant » qui créé automatiquement pour moi le contrôleur, le modèle et des vues pour CRUD de base .. mais maintenant je veux juste ajouter une méthode « helloworld » à mon contrôleur et quand je vais à

http://localhost:3000/students/helloworld 

Je reçois un

Impossible de trouver le Student avec ID = helloworld

d'erreur

.

Qu'est-ce que je manque? .. Je sais que ça a à voir avec les routes et la chose REST mais je n'arrive toujours pas à comprendre comment je pourrais utiliser mes propres méthodes ... dois-je modifier mes routes? Fichier .rb chaque fois que je crée une nouvelle méthode? .. s'il vous plaît aider

Répondre

4

Les routes pour les modèles dans Rails sont divisés en 2 groupes. Ceux qui agissent sur un seul objet (penser éditer, mettre à jour, supprimer) et ceux qui n'ont pas un seul objet sur lequel agir (nouveau, index). Si vous voulez créer votre propre méthode qui ne prend pas d'ID d'objet, vous devez ajouter une configuration de route pour cette méthode dans votre fichier de routes. Les méthodes sont des méthodes de membre ou de collection. Les URL des méthodes membres ressemblent à/model/id/nom_méthode. Les méthodes de collection ressemblent à ce que vous voulez (/ model/method_name). Voici un exemple pour vos élèves modèle (routes.rb)

map.resources :students, :member => {:some_member_function_example => :get }, 
          :collection => { :helloworld => :get } 

Remarque: Vous pouvez simplement supprimer le: membre => ... à partir de la configuration et ont la seule collection si vous avez pas de méthodes membres à définir.

+0

OK, donc je dois être éditer mon routes.rb tout au long du développement ... I Je déteste ça ... J'avais l'habitude d'avoir juste envie d'éditer des routes si vous vouliez quelque chose de fantaisiste (dans le codeigniter) ... la valeur par défaut était toujours controller/method/param1/param2/param3/param4, etc J'ai une autre question .. Je veux changer les noms des méthodes que l'échafaud a créé .. parce que mon application est en espagnol. donc pour «nouveau» je veux «nueva», pour «créer» je veux «crear» ..... – ignaciofuentes

+0

Je voudrais regarder le wiki de rails d'internationalisation pour les articles qui peuvent vous aider. http://rails-i18n.org/wiki – scottd

0

Le lien /students/foo n'appellera pas la méthode foo du students_controller. C'est parce que les mappages REST dans Rails incluent/:controller/:id route pour GET. Et votre lien correspond à ce modèle.

Pour remplacer cette voie (pour les méthodes sans paramètres, comme la vôtre), utilisez l'extrait suivant:

map.resources :students, :collection => {:method_name => :get}