2010-05-08 5 views
1

Je suis nouveau sur les rails!Méthode de contrôleur Rails allant au pluriel

Ok, j'essaye de mettre en place un formulaire d'inscription d'utilisateur. Il est mappée comme une ressource unique dans les routes

map.resource :user 

et en essayant de créer l'utilisateur via la console fonctionne très bien. le code du contrôleur pour l'inscription de l'utilisateur est la suivante:

def signup 
    @user = User.new#(params[:user]) 
    end 

def create 
    @user = User.new(params[:user]) 
    #debugger 
    if request.post? 
    if @user.save 
     session[:user] = User.authenticate(@user.login, @user.password) 
     flash[:message] = "Signup successful" 
     redirect_to registries_path   
    else 
     flash[:warning] = "Signup unsuccessful" 
     #redirect_to 'user/signup' 
    end 
    end 
    end 

La vue de votre inscription est la suivante (ce qui est là que je pense quelque chose va mal)

<% form_tag user_path do %> 
<p>User creation.</p> 
<p><%= error_messages_for 'user' %></p> 

<p> 
    <label>Username:</label> 
    <%= text_field_tag 'login', nil, :size => 20, :maxlength => 20 %> 
</p> 
<p> 
    <label>Password:</label> 
    <%= password_field_tag 'password', nil, :size => 20, :maxlength => 20 %> 
</p> 
<p> 
    <label>Password confirmation:</label> 
    <%= password_field_tag 'password_confirmation', nil, :size => 20, :maxlength => 20 %> 
</p> 
<p> 
    <label>Email:</label> 
    <%= text_field_tag 'email' %> 
</p> 
<p><%= submit_tag 'Signup' %></p> 
<% end %> 

Maintenant, cette page rend ça va. J'ai appelé le formulaire sur le "user_path" qui est singulier (je pense?). Mais quand je frappe le bouton d'envoi, il me donne une erreur disant que

uninitialized constant UsersController 

l'apparition de l'erreur est logique, puisque l'utilisateur est censé être singulier, donc si elle tente d'appeler le contrôleur des utilisateurs, il devrait être en train de relâcher une erreur. Quand j'ai vérifié le journal du serveur, il affiche ce message:

Processing ApplicationController#create (for 127.0.0.1 at 2010-05-08 16:26:14) [POST] 
    Parameters: {"commit"=>"Signup", "password_confirmation"=>"[FILTERED]", "action"=>"create", "authenticity_token"=>"yOcHY+rMjaqmu9HS8EwnDqJKbc0Zxictc0y4dtD26ac=", "controller"=>"users", "login"=>"bob", "password"=>"[FILTERED]", "email"=>"[email protected]"} 

NameError (uninitialized constant UsersController): 

Dans les params, je vois qu'il appelle le contrôleur « utilisateurs ». Mais je ne suis pas sûr de savoir comment résoudre ce problème, ou ce qui l'amène à appeler le contrôleur «utilisateurs» par opposition au contrôleur «utilisateur».

Des idées? Merci d'avance!

Répondre

1

Les utilisateurs sont généralement traités au pluriel, pas au singulier. Si vous voulez l'afficher comme quasi singulier dans une URL RESTful, essayez de définir vos routes.rb comme ceci:

map.resources :users, 
       :as => 'user' 
+0

oh. Je pensais que puisqu'il n'y aurait qu'un seul utilisateur à la fois (par adresse IP de toute façon, ou quelque chose comme ça), une ressource singulière était la voie à suivre. comme comment certains modèles utilisent Session comme une ressource singulière puisqu'il n'y a qu'une seule session active par personne? dans ce cas, je pourrais juste aller aux utilisateurs, et voir ce qui se passe. merci! –

+0

Vous pouvez, par exemple, autoriser un utilisateur à voir les profils d'autres utilisateurs. – kingjeffrey

+2

Ok, je suis allé à la méthode des utilisateurs au pluriel, et cela fonctionne comme je le voulais. Merci! :) Les sessions sont-elles normalement traitées comme une ressource singulière? Et si oui, y a-t-il une explication simple quelque part pourquoi les deux sont traités différemment, et peut-être même quelques informations sur ce qui est normalement traité comme un pluriel et ce qui est normalement traité comme un singulier? –

Questions connexes