1

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

在我的 session_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 图片/更新”。而且我认为其他一些帖子表明这是因为我使用的是 jquery 而不是原型。任何帮助,将不胜感激。

4

3 回答 3

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
}

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

于 2012-11-22T20:28:27.957 回答
0

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

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

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

于 2012-11-22T19:26:23.387 回答
0

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

document.location.href = '什么/你/想要';

于 2012-11-22T20:19:20.930 回答