IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ruby on Rails Discussion :

routage de methodes


Sujet :

Ruby on Rails

  1. #1
    Membre habitué Avatar de horkets
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    326
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 326
    Points : 138
    Points
    138
    Par défaut 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

    24 hours a day ... never enough

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 127
    Points : 124
    Points
    124
    Par défaut
    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.
    Mon blog sur Ruby on Rails : 2dconcept

  3. #3
    Membre habitué Avatar de horkets
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    326
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 326
    Points : 138
    Points
    138
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

    24 hours a day ... never enough

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 127
    Points : 124
    Points
    124
    Par défaut
    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 }
    Mon blog sur Ruby on Rails : 2dconcept

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910
    Par défaut
    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.
    Toute la documentation Ruby on Rails : gotapi.com/rubyrails
    Mes articles :
    > HAML : langage de template pour Ruby on Rails

  6. #6
    Membre habitué Avatar de horkets
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    326
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 326
    Points : 138
    Points
    138
    Par défaut
    héhé,

    Je m'en vais essayer cela de suite !

    Merci pour ces infos claires et précises

    24 hours a day ... never enough

Discussions similaires

  1. [OL-2007] methode de routage des mails
    Par ngoudjo dans le forum Outlook
    Réponses: 1
    Dernier message: 18/08/2011, 22h17
  2. [debutant] [servlets] methode init()
    Par be_on_edge dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 01/03/2004, 16h11
  3. [METHODE] -> Détection de virus ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/02/2004, 18h04
  4. Passage de variable par methode post ?
    Par oazar dans le forum Flash
    Réponses: 33
    Dernier message: 16/10/2003, 18h03
  5. Methode de drcherche a l,interieur de basse de donner texte
    Par philippe V dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 03/12/2002, 11h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo