Ruby on rails Rails 3应用程序没有';提交AJAX表单后不能重定向

Ruby on rails Rails 3应用程序没有';提交AJAX表单后不能重定向,ruby-on-rails,ajax,ruby-on-rails-3,authlogic,Ruby On Rails,Ajax,Ruby On Rails 3,Authlogic,我有一个带有:remote=>true的Authlogic登录表单,如果用户/密码无效,它会使用RJS模板进行一些内联验证。这很好,但是当凭据有效时,它不会正确地重定向到其他位置 以下是响应表单输入的控制器: class UserSessionsController < ApplicationController respond_to :html, :js before_filter :require_no_user, :only => [:new, :create]

我有一个带有
:remote=>true
的Authlogic登录表单,如果用户/密码无效,它会使用RJS模板进行一些内联验证。这很好,但是当凭据有效时,它不会正确地重定向到其他位置

以下是响应表单输入的控制器:

class UserSessionsController < ApplicationController
  respond_to :html, :js

  before_filter :require_no_user, :only => [:new, :create]
  before_filter :require_user, :only => :destroy

  def new
    @user_session = UserSession.new
  end

  def create
    @user_session = UserSession.new(params[:user_session])

    respond_to do |format|
      if @user_session.save     
        flash[:notice] = "Login successful!"
        format.html { redirect_to account_url }
      else
        format.js
      end
    end
  end

  def destroy
    current_user_session.destroy
    flash[:notice] = "Logout successful!"
    redirect_to root_path
  end

end

我找到了一个解决办法。根据,我将以下内容添加到我的应用程序控制器:

def redirect_to(options = {}, response_status = {})
  if request.xhr?
    render(:update) {|page| page.redirect_to(options)}
  else
    super(options, response_status)
  end
end

这将防止通过xhr传递重定向响应。如果在控制器中有一种更“正确”的方法,我想听听。

您可以按以下方式操作:

在allpication.js中

$(document).ready(function(){
    $(document).ajaxError( function(e, xhr, options){
    if("401" == xhr.responseText)
    {
       $(location).attr('href','/users/sign_in');
    }
  });
}) 
控制器的方法有以下代码:

respond_to do |format|
    format.html {redirect_to @new_user_session_url}
    format.js { render :text=>'401' ,:status=>401}
end
但我认为有更好的方法来做到这一点

app
 views
   user_sessions
     create.js.erb(create file this)
在创建操作中添加此代码

 def create
  @user_session = UserSession.new(params[:user_session])

respond_to do |format|
  if @user_session.save     
    flash[:notice] = "Login successful!"
    @url = account_url
  end
 format.js
end
结束

在“create.js.erb”中

window.location.replace();

这看起来比contoller中的
render:js=>“window.location=…
更优雅,但它给了我
ActionView::MissingTemplate(缺少模板控制器/更新,应用程序/更新,带有{:handlers=>…
哦,这是因为我使用的是jQuery。而且
jrails
有点过时,可惜
 def create
  @user_session = UserSession.new(params[:user_session])

respond_to do |format|
  if @user_session.save     
    flash[:notice] = "Login successful!"
    @url = account_url
  end
 format.js
end
window.location.replace(<%= @url %>);