2010-10-15 63 views
3

這看起來應該是直截了當的,但我很難過。我有一個鏈接到視圖控制器,最終使用send_data將文件下載到用戶的硬盤驅動器。這工作得很好,並且當前視圖顯然沒有改變。Rails文件下載和查看更新 - Howto?

但是現在我希望網頁在下載完成後提供一些反饋。我天真地把類似下面的代碼在控制器中SEND_DATA方法調用之前:

flash[:notice] = "Nice work, hot shot!" 
send_data file, :filename=>fullname+".txt", :type=>"text/plain" 

但是,這並不工作,因爲當前視圖不重裝給我一個機會,以顯示Flash變數。

我也嘗試爲此操作添加RJS視圖,但導致舊的DoubleRender錯誤,因爲send_data也是渲染操作。

因此......呃......在運行send_data後,如何將數據傳回當前視圖?還是有另一種解決這個問題的方法嗎?

謝謝! 亞倫。

回答

2

也許你可以在響應中設置一個cookie,並在單擊下載文件的鏈接時用javascript爲該cookie進行輪詢。然後,只需定期爲cookie的使用你最喜歡的JavaScript框架

cookies["download_finished"] = "true" 
send_data file, :filename=>fullname+".txt", :type=>"text/plain" 

的cookie可以被這樣設置。

+0

有趣的想法!玩過這個之後,我很難讓它工作。 cookie可以在控制器操作中設置,但在頁面重新加載之前不會被檢查。所以我可以下載這個文件,沒有任何反應。但是當我手動刷新頁面時,繁榮!間隔檢查會啓動並檢測cookie。嗯... – 2010-10-15 21:13:03

+0

是的,我得到它的工作!只是一個簡要介紹:在控制器動作,我設置cookie,但你必須有像這樣的域和路徑:餅乾[:download_complete] = { \t \t:值=>「真」, \t \t:域=> 「本地主機」, \t \t:路徑=> 「/」 \t} – 2010-10-15 21:26:27

+0

[抱歉,提交過早] - 然後在視圖中,我在頂部的代碼: 它調用一個使用jQuery cookie插件檢查該cookie的javascript函數;如果找到,它會重新加載頁面並使用與設置cookie相同的信息擦除cookie:$ .cookie('download_complete',null,{domain:「localhost」,path:「/」});這可以防止頁面不斷重新加載。很好的回答,非常感謝! – 2010-10-15 21:28:35