Précédent   Forum des professionnels en informatique > Autres langages > Autres langages > Ruby > Ruby on Rails
Ruby on Rails Le forum sur le framework Ruby on Rails. Voir aussi la FAQ RoR et les cours RoR.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/12/2011, 18h11   #1
Invité de passage
 
Homme
Étudiant
Inscription : 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 : 0
Points : 0
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 :
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 :
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 :
Citation:
Routing Error

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

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

Citation:
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.
kozzmo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 12h18   #2
Membre du Club
 
Homme
Étudiant
Inscription : 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 : 51
Points : 51
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 :
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 :
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.
ernestrenan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 14h37   #3
Membre confirmé
 
Homme
Inscription : février 2005
Messages : 287
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27
Localisation : France

Informations forums :
Inscription : février 2005
Messages : 287
Points : 271
Points : 271
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
PierreAd est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h21.


 
 
 
 
Partenaires

Hébergement Web