-
routage de methodes
Bonjour à tous,
Est ce que quelqu'un pourrait m'expliquer ceci (Pour info -> OS = windows XP) ?
Je génère un scaffold à l'aide de la console
Un contrôleur est créé contenant les méthodes 'de bases' suivantes create, new, edit, show et destroy
Tout fonctionne bien lorsque je tente d'utiliser les méthodes auto générées.
Mon problème se situe dès le moment ou je crée une nouvelle méthode dans ce même contrôleur, car lorsque je tente de joindre la page via le nom de la méthode créée manuellement, je n'arrive pas à l'afficher.
Comme si la page n'existait pas (alors que la méthode existe belle et bien !).
Je me dis donc qu'il doit s'agir d'une route qui n'existe pas encore, mais je n'ai aucune idée de comment la préciser dans le fichiers routes ...
Est ce bien la bonne logique ?
Si oui comment puis je arriver à ce que cette page s'affiche sans devoir créer un 2 ème contrôleur pour les méthodes créées manuellement ?
Merci d'avance pour votre aide
:)
-
Salut,
Quand tu utilises scaffold, une ressource REST est générée. Imaginons que tu ais généré une ressource User, si tu regardes dans ton fichier routes.rb, tu auras :
map.resources :users
Tu peux facilement ajouter une méthode personnalisée :
1) map.resources :users, :collection => { :ta_methode => :get }
Ou bien :
2) map.resources :users, :member => { :ta_methode => :get }
La différence est la suivante :
- Si ta méthode s'applique à la collection (l'ensemble) des utilisateurs, tu utilises la méthode 1. Ainsi par exemple, une méthode stats qui te permettrait d'afficher le nombre d'users et autres stats, sera appliquée à la collection.
- Si tu as par exemple une méthode activate, qui permet d'activer un utilisateur, tu utiliseras la méthode 2 car ton action ne s'applique qu'à un seul utilisateur.
Attention, il faut redémarrer ton serveur pour que toute modification dans le fichier routes.rb soit prise en compte.
-
Salut Mookie,
Merci pour ces précisions :)
Prenons un autre exemple (histoire de voir si j'ai bien compris ...)
je crée un scaffold article
Imaginons que je veuille ajouter une méthode qui me permet de générer une liste d'articles selon des critères entrés dans un formulaire.
Est ce qu'il est correcte de créer une ligne dans le fichier routes.rb ressemblant à ceci :
Code:
map.resources :articles, :collection => { :generer_la_liste => :get }
=> :collection car la méthode generer_la_liste peut prendre en compte plusieurs articles ?
question supplémentaire : est ce toujours :get ??
Merci d'avance
:)
-
Oui, c'est bien cela.
Tu peux remplacer :get par n'importe quel autre verbe HTTP : post, put, ...
Et tu peux bien sûr passer plusieurs méthodes :
:collection => { :generer_la_liste => :get, :une_autre_methode => :post }
-
J'ajoute à ce qui a été dit que tu peux utiliser :any pour prendre en compte tout les méthodes HTTP (dans ton ça peut être utile).
A l'intérieur de ton action tu pourras utiliser request.get? ou .post? pour savoir quelle méthode a été utilisée.
-
héhé,
Je m'en vais essayer cela de suite !
Merci pour ces infos claires et précises
:king: