2009-08-12 62 views
0

我试图用Rails创建一个注册表单。它正在工作,但它不显示验证中的错误(验证,但错误不显示)。在Ruby on Rails中不显示表单错误

这里是我的文件:

# 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 

为什么没有显示错误?

谢谢!

回答

6

您的表单POST操作应该确实指向create方法,新方法实际上只是呈现表单。我的意思是它旁边的问题,但它是Rails约定。

您的问题的答案是,在您尝试保存用户的分支中,您需要让您的用户对象成为INSTANCE变量。你只是把它当作一个局部变量。所以当表单呈现时,表单助手在当前作用域中查找实例变量“@user”,但它不存在。在你的分支的第二部分在你的用户变量的前面加上一个“@”,你可以尝试并保存。如果失败,那么表单助手应该显示错误。

+0

谢谢!固定... – 2009-08-12 18:09:22