rails link_to_function文件下载

时间:2011-06-14 20:06:33

标签: javascript ruby-on-rails

在rails 2.3.11 app中,我正在尝试注册仅供登录用户使用的文件下载。 当他们点击链接下载文件(这是指向公共目录中文件的直接链接)时,我希望rails应用程序调用方法。

我想我应该使用link_to_function,我可以在rails中编写javascript /方法来记录下载。

我不知道如何在调用方法后继续下载文件。在方法调用之后(即在后台),应该开始文件下载。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

你可能过度思考这个问题,不需要Javascript。你想要的是一个下载动作的链接,下载动作反过来注册下载然后流回文件。这应该可以正常工作,除非你有一个非常大的文件,你不希望Rails必须处理。

从控制器发回二进制文件的示例:

send_data(binary_data, :type => 'application/pdf', :filename => 'myfile.pdf', :disposition => 'inline' )

甚至更好:

render :content_type => 'application/octet-stream', :text => Proc.new { |response, output|
    # do something that reads data and writes it to output
}

答案 1 :(得分:0)

Abdullah Jibaly完美的答案是不需要Javascript的优势。

我最终实现了一个jQuery javascript解决方案,让文件下载一样。

在我看来,添加下载类的链接对于js的工作非常重要:

<%= link_to document.type.value, document.scan.url, :popup => true, :class => "download" %>

添加了javascript,我添加了一个property_id作为发布的数据,因为我需要在我的控制器中使用该值:

  <script type="text/javascript">
    $(document).ready(function() {
      $(".download").click(function(event){
        $.post("/ajax/property_interested_user", { property_id: $("#property_id").html() });
      });
    });
  </script>