在ajax调用之后Rails重定向

时间:2012-11-22 18:46:38

标签: jquery ruby-on-rails ajax redirect

因此,在我的应用程序主页上,可以通过ajax请求调用各种操作。当用户登录时,可以进行这些调用。当用户未登录时,如果他们点击任何转到ajax呼叫的链接,我想将用户重定向到登录页面。

在我的sessions_helper中,我有一个方法在控制器中用作这些操作的before_filter。

  def signed_in_user
    unless signed_in?
      store_location
      redirect_to signin_url, notice: "Please sign in."
    end
  end

但是重定向对这些调用不起作用,因为调用是通过ajax进行的。 (对于记录,它确实适用于非ajax调用)例如:

<%= link_to new_picture_path, remote: true  do %>
  Add New
<% end %>

有没有办法让这个重定向通过ajax工作?我正在使用rails v3.2.8和jquery。我尝试将以下方法添加到我的应用程序控制器中,正如其他一些帖子所示:

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

但是我收到一个错误:“MissingTemplate pictures / update”。我认为其他一些帖子表明这是因为我使用的是jquery而不是原型。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

这不起作用,因为ajax调用将被重定向,但您的页面已经加载,重定向不会影响它。

删除自定义redirect_to,这对您没有帮助。

您必须检查您的ajax调用是否返回302,然后您可以使用带有window.location的javascript重定向用户。

答案 1 :(得分:0)

您可以在JavaScript代码中指定document.location.href

document.location.href ='what / you / want';

答案 2 :(得分:0)

你可以创建隐藏的段落并从控制器传递值,并通过js检查该p是否包含指定的单词,如果在任何地方重定向

def signed_in_user
    unless signed_in?
      store_location
      @redirect = 'redirect'
    end
  end
你的html.erb

中的

<p class='hide'><%= @redirect %> </p>

和js文件

if ($('.hide').text() == 'redirect'){
//do the thing
}

可能有点乱,但有效的重定向方式