下载文件后重定向无效

时间:2015-10-17 07:07:49

标签: ruby-on-rails x-accel-redirect

以下是我在控制器中显示的代码:

def show
  @archive = Archive.find(params[:id])
  if @archive.eula.blank? || params[:eula] == "1"
    send_archive(@archive) and return
    # redirect_to archives_url and return
  else
    @eula = @archive.eula
    render
  end
end

def send_archive(archive)
  head(:x_accel_redirect => archive.download.url, :content_type => archive.download.content_type, :content_disposition => "attachment; filename=#{archive.download.original_filename}")
end

每次下载,我都会向用户@eula = @archive.eula显示Eula协议。这个eula有2个按钮' Accept'并且'拒绝'如果用户点击“拒绝”,我们只需返回下载页面即可。如果用户点击“接受”,我们将为该用户下载该文件。但即使在下载文件后,页面也不会返回下载页面。 Eula页面仍然显示给用户。 如果我在redirect_to archives_url and return之后添加send_archive,则会抛出错误:

  

在此操作中多次调用渲染和/或重定向。   请注意,您最多只能调用渲染或重定向   每次行动一次......

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

创建了一个文件' eula.js '在位置: app / assets / javascripts eula.js包含以下代码:

    var interval = null;
$(document).ready(function() {
    function myFunction(){
        if(window.location.href === "http://www.yoursite.com")
        {
            clearInterval(interval);
        }
        else {
            window.location.href = "http://www.yoursite.com";
        }
    }

    $('#Accept').click(function (event) {
        interval = setTimeout(myFunction, 5000);
        event.preventDefault();
    });
});

在show.html.erb中,您需要添加:id => "Accept",以便js可以识别按钮点击。现在,只要用户点击“接受”,就会开始下载,点击5秒后,页面将被重定向到您定义的位置。这条代码对我来说很好。