2009-08-12 19 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のコンベンションです。

あなたの質問に対する答えは、ユーザーを試して保存するブランチで、UserオブジェクトをINSTANCE変数にする必要があるということです。あなたはちょうどローカル変数としてそれを持っています。したがって、フォームがレンダリングされるとき、フォームヘルパーは現在のスコープ内でインスタンス変数 "@user"を探しますが、それは存在しません。保存しようとするブランチの2番目の部分にユーザ変数の前に "@"を置きます。失敗した場合、フォームヘルパーはエラーを表示する必要があります。

+0

ありがとうございます!一定... –

関連する問題