模型验证错误消息都没有得到显示
问题描述:
当我在链接点击标志应该检查有效的用户名和密码,并显示在页面的一部分,这是我在颜色框的弹出我打电话标志的消息,但我不能够显示错误信息。模型验证错误消息都没有得到显示
这是我的LoginController:
def login
if request.post?
@user = User.new(params[:user])
user=User.authenticate(params[:username], params[:password])
if user.nil?
flash[:error] = 'Login unsuccessful'
redirect_to :back
else
flash[:notice] = 'Login successful'
session[:user] = user.id
redirect_to :controller=>'users', :action => 'show',:username=>user.username
end
end
end
User.rb:
def self.authenticate(username, pass)
user = find(:first, :conditions=>["username = ?", username])
return nil if user.nil?
return user if User.hash_password(pass) == user.password && username == user.username
nil
end
在我看来page_sign_in.html.erb
页
<%= form_for @user, :url=>{:controller=>"logins",:action=>"login"},:remote=>true,:html=>{ :onSubmit => "return checkSignupValidation()",:id=>"signin_form", :multipart=>true} do |f| %>
@user
是给错误:undefined method
MODEL_NAME”的Nilclass`
答
你的问题是,没有为登录没有模型 - 有没有需要。你不希望使用form_for
,使用替代form_tag
:
<%= form_tag controller: "logins", action: "login", etc.. do %>
<%= text_field_tag :username %>
<%= password_field_tag :password %>
<% end %>
那我就推荐了一些改进措施,你的控制器:
def login
if request.post?
user = User.authenticate(params[:username], params[:password])
if user.nil?
flash[:error] = 'Login unsuccessful'
redirect_to :back #I try to avoid :back, it feels better to use a fixed path
else
flash[:notice] = 'Login successful'
session[:user] = user.id
redirect_to :controller=>'users', :action => 'show', :username=>user.username
end
end
end
你不需要@user变量,所以只是避免不必要的数据库查询。我不知道它是否如此好使用:回来,我总是尝试使用固定的路径。
日Thnx klump.wht我应该指定,而不是回到becoz我想,如果用户登录失败,再次呈现相同的登录弹出。 – sonalkumar 2012-04-20 11:37:57
是的,它是你使用的登录方法?然后你可以尝试像'controller:login,action:login'这样的东西... – klump 2012-04-20 14:40:18