Rails redirect_to Parent Partial / View

时间:2014-01-04 01:30:04

标签: ruby-on-rails partial

所以我试图重定向到我的root_url,但是从几个部分深处。重定向有效,但只在部分内重定向。它在实现部分之前工作正常。要重定向,我有一个检查会话的before_filter,如果会话不再有效,则重定向到root_url。

另一个注意事项:我正在进行ajax调用以返回其他部分(如加载div创建的服务器端),似乎在会话到期后而不是返回部分的html,它返回它应该重定向到的登录html。这太烦人了。

所以 的 application.html.erb

<div id="main-contain" class="container">
    <%= yield %>
</div>

呈现 的 _content.html.erb

<%= render partial: 'partials/content' %>

呈现 的 _my_partial.html.erb

<%= render partial: 'partials/my_partial' %>

当会话结束时,重定向仅在最深部分内工作。

有什么想法吗?经过长时间的磨头,我上下搜索过。

编辑:

这是前过滤功能

unless is_authorized

      flash[:content] = { title: 'Login Required', message: 'You must log in to access dash.'  } 
      redirect_to '/gate'  

end

其中'gate'是我的登录页面。这是路线:

match 'gate' => 'gate#latch'

2 个答案:

答案 0 :(得分:1)

经过多次头脑刮擦后弄清楚了:)我似乎只能将登录页面作为html而不是重定向返回。我的解决方案:

我的身份验证检查中

unless is_authorized

  respond_to do |format|
    format.html { redirect_to '/gate' }
    format.js { render :json => { redirect: true } , :status => :unauthorized }
  end

end # is_authorized

和一些javascript:

$.ajaxSetup({
    statusCode: {
      401: function(data) {
        var response = JSON.parse(data.responseText);
        if (response.redirect == true) {
          location.href = "/gate";
        }
      }
    }
  });

所以我真正需要做的就是在会话过期时发回401,在AJAX调用中监听401s,最后重新定向,如果我们收到401和重定向参数。

答案 1 :(得分:0)

如果您正在使用ajax调用,则应返回JS重定向/重新加载页面;否则页面将不会转到'/ gate'网址