0

我需要为登录实现类似 Ajax 的行为:

我有这个控制器:

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 的初学者,但我的任务是这样做。

4

2 回答 2

0

如果您使用的是 Rails 3,我建议您查看本指南http://guides.rubyonrails.org/ajax_on_rails.html

于 2013-01-16T17:57:06.787 回答
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

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

于 2013-01-16T18:45:49.453 回答