将redirect_to格式更改为:Rails中的js

时间:2013-08-29 23:39:11

标签: ruby-on-rails ajax redirect format

我有一个控制器操作,只有登录的用户才能访问。如果用户没有登录,我想将它们重定向到登录表单,这是一个由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

3 个答案:

答案 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 %>