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 :

Problèmes de routes


Sujet :

Ruby on Rails

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Problèmes de routes
    Bonjour à tous,

    Pour un projet scolaire, je dois mettre en place un site web qui me permettra d'accéder à une base de données. Dans un premier temps, une simple gestion d'utilisateurs est à implémenter (création, validation, édition, etc.). Le langage utilisé est Ruby on Rails.

    routes.rb
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    Myproject::Application.routes.draw do
      # resources :users
     
      # The priority is based upon order of creation:
      # first created -> highest priority.
     
      # Sample of regular route:
      #   match 'products/:id' => 'catalog#view'
      # Keep in mind you can assign values other than :controller and :action
     
      # Sample of named route:
      #   match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase
      # This route can be invoked with purchase_url(:id => product.id)
     
      # Sample resource route (maps HTTP verbs to controller actions automatically):
      #   resources :products
     
      # Sample resource route with options:
      #   resources :products do
      #     member do
      #       get 'short'
      #       post 'toggle'
      #     end
      #
      #     collection do
      #       get 'sold'
      #     end
      #   end
     
      # Sample resource route with sub-resources:
      #   resources :products do
      #     resources :comments, :sales
      #     resource :seller
      #   end
     
      # Sample resource route with more complex sub-resources
      #   resources :products do
      #     resources :comments
      #     resources :sales do
      #       get 'recent', :on => :collection
      #     end
      #   end
     
      # Sample resource route within a namespace:
      #   namespace :admin do
      #     # Directs /admin/products/* to Admin::ProductsController
      #     # (app/controllers/admin/products_controller.rb)
      #     resources :products
      #   end
     
      # You can have the root of your site routed with "root"
      # just remember to delete public/index.html.
    root :to => 'users#index'
    resources :users, :controller => 'users'
     
      # See how all your routes lay out with "rake routes"
     
      # This is a legacy wild controller route that's not recommended for RESTful applications.
      # Note: This route will make all actions in every controller accessible via GET requests.
    match ':controller(/:action(/:id(.:format)))'
    end
    users_controller.rb
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class UsersController < ApplicationController
      def inscription
    	@listePays = Country.all.sort! {|a, b| a.paysname <=> b.paysname}
    	@user = User.new
      end
      def connexion
    	@user = User.new
      end
    end
    Je dispose de 4 vues : index, inscription, connexion et contacts. Je parviens à passer d'index à contacts sans problème, mais ça coince lorsque je veux atteindre inscription ou connexion car ce sont les seules pages qui font appel aux variables listePays et user. Voici les erreurs que je rencontre :

    SANS resources :users, :controller => 'users' dans routes.rb :
    Routing Error

    No route matches {:controller=>"users", :format=>nil}
    AVEC resources :users, :controller => 'users' dans routes.rb :
    Unknown action

    The action 'show' could not be found for UsersController
    Si je rajoute def show end dans user_controller.rb :

    Template is missing

    Missing template users/show, application/show with {:handlers=>[:erb, :builder, :coffee], :formats=>[:html], :locale=>[:en, :en]}. Searched in: * "C:/Users/Geoffrey/Documents/COURS/M18/SGBD/Labo/myproject/app/views"
    Non seulement je ne sais absolument pas ce que signifie cette méthode show, mais en plus ça ne fonctionne même pas

    Je suis un peu paumé, un peu d'aide serait la bienvenue

    Merci,

    Kozzmo.

  2. #2
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 136
    Points : 89
    Points
    89
    Par défaut
    Je pense que ton fichier de routes n'est pas bon. Tu as essayé de taper rake routes dans la console pour voir ce que ça donne ?
    Déjà tu créés une ressource pour les utilisateurs donc ça te créé les 4 routes "par defaut du crud" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    users/ => users#index
    user/new => users#new
    user/id => users#show
    user/id/edit =>users#edit
    http://guides.rubyonrails.org/routing.html.

    Ensuite quel url appelles-tu exactement parce qu'avec la derniere ligne de ton fichier rails attend quelque chose comme :"myapp.com/users/inscription".

    Je ne sais pas si c'est nécessaire mais j'ai pris l'habitude de toujours mettre

    Code ruby : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class FooController < ApplicationController
    respond_to :html, :json, etc.
     
    def method
    respond_with(@foo = Foo.all)
    end
    end

    Peut-être que le fait de ne pas spécifier de format pour le retour dans le contrôleur empêche rails de renvoyer quelque chose.

    Après d'un point de vue conception, je ne mettrai pas connexion dans le contrôleur de Users parce que tu ne créés pas d'utilisateur.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour Kozzmo,

    Je vais tâcher de t'apporter quelques réponses, malgré mon expérience encore récente de Rails.

    Comme tu le sais, Rails s'appuie sur un modèle MVC, Modèle-Vue-Contrôleur. Le modèle définit la structure des données en base, la vue définit la façon dont les données d'une page s'affichent, et le contrôleur fait le lien entre eux, en passant à la vue les informations récupérées dans la base (par exemple). Le lien entre l'URL tapée et les vues/contrôleurs à utiliser se fait dans le fichier config/routes.rb que tu mentionnes.

    Comme le dit ernestrenan, lorsque tu utilises dans ton fichier routes.rb la syntaxe "resources :users", Rails va te créer des routes par défaut (7 et non pas 4, cf cette section sur le lien déjà donné dans la réponse précédente). Parmi ces routes, une route "show" est générée, qui correspond par convention à la page affichant le détail d'un élément (user en l'occurence).

    Pour en venir à tes erreurs :
    1. Quand tu supprimes "resources :users" de ton routes.rb, tu as une erreur puisque Rails ne sait plus quel contrôleur et quelle vue appeler pour l'URL accédée.
    2. Quand tu rajoutes "resources :users" dans ton routes.rb, Rails fait la correspondance. Il s'attend à trouver une action "show" dans ton contrôleur (càd une méthode def show ... end) et une vue "app/views/users/show.html.erb". Sans la méthode dans le contrôleur, tu as le première erreur "The action 'show' could not be found".
    3. Si tu ajoutes la méthode (même vide) dans le contrôleur mais ne crées pas la vue, tu obtiens alors l'erreur n°2 "Missing template etc." indiquant qu'il ne parvient pas à trouver le fichier définissant la vue à afficher. La solution est donc de créer ce fichier dans ton répertoire "app/views/users/".


    En espérant t'avoir donné quelques pistes

Discussions similaires

  1. Problème de route avec 2 cartes réseau-Dfault gateway
    Par zoltix dans le forum Administration
    Réponses: 5
    Dernier message: 05/12/2010, 12h50
  2. [1.x] Problème de routing en JS
    Par joris34 dans le forum Symfony
    Réponses: 3
    Dernier message: 16/07/2010, 10h48
  3. [CakePHP] Problème de routing ?
    Par herr_wann dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 17/12/2009, 19h40
  4. Mongrel : Problème de route
    Par DonKnacki dans le forum Ruby
    Réponses: 2
    Dernier message: 27/03/2009, 10h12
  5. Accès action impossible, problème de route?
    Par barnoufal dans le forum Ruby on Rails
    Réponses: 12
    Dernier message: 17/10/2008, 15h54

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