2013-01-16 39 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 

您还应该利用发生请求的上下文。这将是脚手架控制器的格式部分。您可以根据请求的类型做不同的事情。