2011-06-14 45 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>