因此,在我的应用程序主页上,可以通过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而不是原型。任何帮助将不胜感激。
答案 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
}
可能有点乱,但有效的重定向方式