2011-06-14 39 views
0

在rails 2.3.11应用程序中,我正在尝试注册仅可用于登录用户的文件下载。 当他们点击链接下载文件(这是公共目录中的文件的直接链接)时,我想让Rails应用程序调用一个方法。rails link_to_function文件下载

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

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

任何想法?

+0

请张贴您的视图和控制器的相关部分。 – BryanH 2011-06-14 20:10:10

回答

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 
} 
+0

好的,有趣的,我会尝试一下。以前从未使用过send_data。 – 2011-06-14 20:18:52

0

阿卜杜拉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>