【问题标题】:Rails 3.2.1 redirect_to not rendering page when using AJAXRails 3.2.1 redirect_to 在使用 AJAX 时不呈现页面
【发布时间】:2012-06-14 10:32:59
【问题描述】:

抱歉,如果这是一个非常愚蠢的问题,或者我做了一些非常愚蠢的事情,我还是个新手。 我正在尝试实现会话超时机制,并且为此在 SO 中找到了一些有用的问题/答案,我已经遵循了。我已将 last_seen 时间添加为会话变量,并在我的应用程序控制器的 before_filter 中对其进行检查,如果超过设置的时间间隔,则会将用户发送回登录页面。

应用程序控制器

reset_session if session[:last_seen] < 1.minutes.ago

if session[:user_id] == nil
  redirect_to login_path, notice: "Please log in"
  return
end

session[:last_seen] = Time.now

这在大多数页面上都可以正常工作,但我有一些页面是标签页,使用 jquery 来更改内容,因为选择了标签页。

链接代码:

<li class="<%=get_active('index_audit','ultra')%>"><%= link_to 'Load  IT Estate', ultraaudit_path, remote: true %> </li>

控制器代码:

def index_audit

  @subscription = current_subscription

  respond_to do |format|
    format.js
  end

end

有一个 index_audt.js 有 JS 用渲染的部分替换 div

如果发生超时并且下一个操作是单击一个选项卡以呈现下一页,它会通过代码但不会在浏览器中显示登录页面

我正在 RubyMine 中进行调试,控制台显示它正在尝试呈现登录页面,即会话/新页面:

Processing by UltraController#index_audit as JS
Parameters: {"locale"=>"en-GB"}
Redirected to http://localhost:3000/?locale=en-GB
Filter chain halted as :logged_in rendered or redirected    
Completed 302 Found in 6ms (ActiveRecord: 0.0ms)


Started GET "/?locale=en-GB" for 127.0.0.1 at 2012-06-14 11:28:44 +0100
Processing by SessionsController#new as JS
Parameters: {"locale"=>"en-GB"}
Rendered sessions/new.html.erb within layouts/application (16.0ms)
Completed 200 OK in 323ms (Views: 320.6ms | ActiveRecord: 0.0ms)

但它只是没有出现在浏览器中

我尝试在 index_audit 控制器方法的顶部放置一个重定向,这也有同样的问题。 我的理论是远程:真实是原因,但我不知道该怎么做才能解决它。有人可以帮忙吗?

【问题讨论】:

    标签: jquery ruby-on-rails-3.1


    【解决方案1】:

    对于遇到此问题的任何人(就像我在将 rails 3.0 升级到 3.1 后所做的那样),建议的修复不起作用或与您自己的不同。

    从 form_for 标记中删除 :remote =&gt; true 允许提交和重定向通过。这是有道理的,因为最后一个表单没有使用 ajax 来获得响应。

    希望这对其他人有帮助!

    【讨论】:

      【解决方案2】:

      如果用户的会话仍然有效,index_audit 动作将返回 JS,但如果用户的会话过期,它将返回登录页面的 HTML。据推测,您的远程处理程序需要 JS 格式,因此它看不到它可以对包含登录页面的 HTML 响应做任何事情。

      最好的方法可能是在SessionsController.new 中添加一个format.js 选项,并创建必要的new.js.erb 视图,这样如果您请求javascript 格式,无论会话是否过期,您总是会得到javascript。

      【讨论】:

      • 谢谢,Charles,这是一个绝妙的主意 - 我会试一试
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-30
      • 2014-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多