以下是我在控制器中显示的代码:
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
,则会抛出错误:
在此操作中多次调用渲染和/或重定向。 请注意,您最多只能调用渲染或重定向 每次行动一次......
请帮我解决这个问题。
答案 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秒后,页面将被重定向到您定义的位置。这条代码对我来说很好。