2013-01-16 72 views
0

我需要實現Ajax像登錄行爲:阿賈克斯登錄Rails的

我有這樣的控制器:

def login 
    if request.post? 
     @frontendu = Frontenduser.authenticate(params[:email], params[:login_password], params[:store_id]) 
     if @frontendu 
     session[:frontend_user] = @frontendu.id 
     @fuser=Frontenduser.find(session[:frontend_user]) 
     @fuser.update_attributes(:is_logged =>true) 
     @fuser.save 
     flash[:message] = "Login successful." 
     redirect_to :back 
     else 
     redirect_to :back 
     end 
    end 
    end 

我有這樣的形式:

<form accept-charset="UTF-8" action="/frontendusers/login" id="signin_form" method="post"> 
    <div class="field"> 
    <%= text_field_tag :email %> 
    </div> 
    <div class="field"> 
    <%= password_field_tag :login_password %> 
    <%= hidden_field_tag :store_id, store_id %> 
    </div> 
    <div class="forget uppercalse"> 
    <a href="#">Forget Username?</a> 
    </div> 
    <div class="forget uppercalse"> 
    <a href="#">Forget Password?</a> 
    </div> 
    <div class="login-button"> 
    <input type="submit" value="Log In"></input> 
    </div> 
</form> 

這工作,但我會喜歡保留登錄表單,並簡單地顯示某個地方(我會把適當的div),登錄失敗。如果它沒有失敗,那麼重定向就好了。

我是Rails的初學者,但我的任務是做這件事。

回答

0

雖然這是相當難看......

def login 
    if request.post? 
    @frontendu = Frontenduser.authenticate(params[:email], params[:login_password], params[:store_id]) 
    if @frontendu 
     session[:frontend_user] = @frontendu.id 
     @fuser=Frontenduser.find(session[:frontend_user]) 
     @fuser.update_attributes(:is_logged =>true) 

     # change this part 
     if @fuser.save 
     flash[:message] = "Login successful." 
     redirect_to :back 
     else 
     # do something here 
     end 

     # original function 
    else 
     redirect_to :back 
    end 
    end 
end 

我建議你腳手架的示例控制器,並使用它作爲一個例。

rails g controller TestyMcTest 

您還應該利用發生請求的上下文。這將是腳手架控制器的格式部分。您可以根據請求的類型做不同的事情。