0

私はRailsとMongoidの初心者です。ログインページを作成しようとしています。問題は、ユーザー名またはパスワードのエラーがある場合、エラーメッセージを表示できないことです。以下は私のコードです。

モデルuser.rb

def self.authenticate(login, pass)

 if user = first(:conditions => {:username => login})

   return user if user.password==(pass)

end

   return false

end

コントローラーuser_auth.rb

def login

   if  request.post? && @user = User.authenticate(params[:user][:username],params[:user][:password])

 redirect_to(:controller => 'posts')

   else

 @user = User.new()
   end
end

login.html.erbを表示

 <% form_for(@user,:url => { :action => "login" } ) do |d| %>
   <% if @user.errors.any? %>
     <div id="error_explanation">
    <%= pluralize(@user.errors.count, "error") %>

    <ul>
     <% @user.errors.full_messages.each do |msg| %>
      <li><%= msg %></li>
   <% end %>
    </ul>
   </div>
 <% end %>

 <p> Your Name: <%= d.text_field :username %><br />  </p>
 <p> Password: <%= d.password_field :password %><br/></p>
 <p><%=d.submit "Login" %></p>
 <% end %>
4

1 に答える 1

0

認証に失敗すると、引数「@user = User.new()」のない新しいユーザーをインスタンス化してから、@user.errorsを探すようです。これは、新しいユーザーがデフォルトでエラーを設定していないことを推測しています(なぜ設定する必要があるのですか?)。問題の説明から、エラー状態が正しく伝達されていないことは明らかです。新しいユーザーインスタンスを介して間接参照を追加するよりも、コントローラーで@errorsを設定し、ビューで@errorsをチェックする方がクリーンでわかりやすくなります。

于 2012-05-26T03:33:25.923 に答える