2009-08-12 8 views
0

J'essaie de créer un formulaire d'inscription avec Rails. Cela fonctionne, mais il n'affiche pas les erreurs de la validation (il valide, mais les erreurs ne s'affichent pas).Les erreurs de formulaire n'apparaissent pas dans Ruby on Rails

Voici mes fichiers:

# new.html.erb 
<h1>New user</h1> 

<% form_for :user, :url =>{:action=>"new", :controller=>"users"} do |f| %> 
    <%= f.error_messages %> 

    <p> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </p> 
    <p> 
    <%= f.label :password %><br /> 
    <%= f.password_field :password %> 
    </p> 
    <p> 
    <%= f.submit 'Create' %> 
    </p> 
<% end %> 

<%= link_to 'Back', users_path %> 

# user.rb 
class User < ActiveRecord::Base 
    validates_presence_of :name 
    validates_presence_of :password 
end 

#users_controller.rb 
class UsersController < ApplicationController 

    def index 
     @users = User.all 
    end 


    def show 
     @user = User.find(params[:id]) 
    end 

    def new 
     if session[:user_id].nil?   
      if params[:user].nil? #User hasn't filled the form 
       @user = User.new 
      else #User has filled the form 
       user = User.new(params[:user]) 

       if user.save 
        user.salt = rand(1000000000) 
        user.password = Digest::MD5.hexdigest(user.salt.to_s + user.password) 
        user.save 
        flash[:notice] = 'User was successfully created.' 
        session[:user_id] = user.id 
        session[:password] = user.password 
        redirect_to url_for(:action=>"index",:controller=>"users") 
       else 
        render :action=>"new" 
       end 
      end 

     else #User is already logged in 
      flash[:notice] = 'You are already registered.' 
      redirect_to url_for(:action=>"index") 
     end 
    end 

# some other actions removed.... 


end 

Pourquoi ne sont pas les erreurs en cours d'affichage?

Merci!

Répondre

6

Votre action POST de formulaire devrait vraiment pointer vers la méthode de création, la nouvelle méthode est vraiment juste pour rendre le formulaire. Je veux dire c'est à côté de votre problème, mais c'est la convention Rails.

La réponse à votre question est que dans la branche où vous essayez et enregistrer l'utilisateur, vous devez avoir votre objet utilisateur être une variable INSTANCE. Vous l'avez juste comme variable locale. Ainsi, lorsque le formulaire affiche l'assistant de formulaire dans la portée actuelle pour une variable d'instance "@user", il n'existe pas. Mettez un "@" devant votre variable utilisateur dans la 2ème partie de votre branche où vous essayez et faites la sauvegarde. Si cela échoue, l'assistant de formulaire doit afficher les erreurs.

+0

Merci !!! Fixé... –