0

我是 Rails 和 Mongoid 的新手。我正在尝试创建一个登录页面。问题是如果出现用户名或密码错误,我无法发出错误消息。下面是我的代码。

模型用户.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 回答