我有一个控制器操作,只有登录的用户才能访问。如果用户没有登录,我想将它们重定向到登录表单,这是一个由ajax驱动的灯箱。虽然初始请求采用html
格式,但我需要更改为js
。现在,我正在尝试这样:
def new
if user_signed_in?
@company = Company.new
else
redirect_to new_user_session_path, format: 'js'
end
end
不幸的是,它仍然将重定向视为html
格式。有没有办法让重定向被视为js
?
答案 0 :(得分:0)
我在rails 3.2.13中尝试过这个有用,我希望它可以解决
if user_signed_in?
.....
else
if request.xhr?
flash[:notice] = "Please login."
flash.keep(:notice)
render :js => "window.location = #{new_user_session_path}"
else
.....
end
end
答案 1 :(得分:0)
我认为你可能正在寻找一个respond_to块以及前面提到的过滤器之前的那个:
class CompaniesController < ApplicationController
before_filter :login
def new
@company = Company.new
render json: @company, layout: false # layout false if you do not want rails to render a page of json
end
private
def login
if !user_signed_in?
#your login code here
end
end
end
不要忘记将您的dataType ajax选项设置为json:
$.ajax({
url: "company/new" //your rails url, what is there is just my best guess
data: query, //whatever paramaters you have
dataType: "json", // or html, whichever you desire
type: "GET",
success: function (data) {
//your code here
}
});
答案 2 :(得分:0)
对于任何使用Rails 5的人来说,我都是这样做的,并且如果要重定向的人在控制器youractionname函数内设置了@redirect变量,则可以在youractionname.js.erb文件中工作。
# ruby control flow
<% if @redirect != nil %>
// javascript call to use rails variable as redirect destination.
location.replace("<%=@redirect%>");
<% end %>