2012-04-20 9 views
0

로그인 링크를 클릭하면 유효한 사용자 이름과 암호를 확인하고 colorbox를 팝업으로 호출하는 부분 페이지에 메시지를 표시해야합니다. 오류 메시지를 표시 할 수 있습니다. 모델 유효성 검사 오류 메시지가 표시되지 않습니다.

내 인 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 : Nilclass`에 대한 'undefined method MODEL_NAME :

<%= form_for @user, :url=>{:controller=>"logins",:action=>"login"},:remote=>true,:html=>{ :onSubmit => "return checkSignupValidation()",:id=>"signin_form", :multipart=>true} do |f| %> 

@user 오류를주고있다 page_sign_in.html.erb 페이지

내보기에서
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 

에게

답변

0

문제는 로그인 할 모델이 없다는 것입니다. 필요하지 않습니다. 그래서 단지 불필요한을 피하기,

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 변수를 필요가 없습니다

<%= form_tag controller: "logins", action: "login", etc.. do %> 
    <%= text_field_tag :username %> 
    <%= password_field_tag :password %> 
<% end %> 

그럼 난 당신의 컨트롤러에 어떤 improvments를 추천 할 것입니다 : 대신 form_tag 사용 form_for을 사용하지 않으 데이터베이스 쿼리. 나는 그것이 사용하기에 그렇게 좋은지 모르겠다 : 다시, 나는 항상 고정 된 경로를 사용하려고 시도한다.

+0

thlx klump.wht 사용자 로그인에 실패 할 경우 동일한 로그인 팝업을 다시 렌더링하고 싶습니다. – sonalkumar

+0

그래, 사용중인 로그인 방법입니까? 그러면'controller : logins, action : login'과 같은 것을 시도 할 수 있습니다. – klump

관련 문제