2011-11-18 43 views
1

這是我的觀點的一部分,如果需要,可以很容易地放入部分。用戶點擊下載鏈接後,如何刷新頁面上的元素?

<% if order_item.still_downloadable == true %> 
    <%= "Photo ##{order_item.gallery_photo.id} - " %> 
    <%= link_to "Download here", download_order_order_item_path(@order, order_item) %> 
    &bull; You may download this <%= pluralize(5 - order_item.download_count, 'more time') %>. 
<% else %> 
    <%= "Photo ##{order_item.gallery_photo.id} - #{order_item.title}" %> 
    &bull; You may not download this file any more. 
<% end %> 

以下是order_items控制器中的下載操作。

def download 
    @order_item = OrderItem.find(params[:id]) 
    @gallery_photo = GalleryPhoto.find(@order_item.gallery_photo_id) 
    @order_item.update_attribute(:download_count, @order_item.download_count += 1) 
    send_file @gallery_photo.image.path(:original), :x_sendfile => true, :type => 'image/jpg' 
end 

什麼是刷新該部分視圖(甚至整個頁面)的最佳方式,以便下載計數更新?

回答

0

我做了一個下載操作並強制顯示頁面不緩存,所以當用戶回到顯示頁面時,瀏覽器被迫重新加載它。在表演動作中:

response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate" 
response.headers["Pragma"] = "no-cache" 
response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT" 
0

我不知道這是否是最好的解決辦法,但你可以這樣做:

$('.download').click(function(){ 
    setTimeout("window.location.reload()",1000);//or other value 
}) 

或者,我會鼓勵你創建將某人cliked下載後發送XHR請求的功能,並更新元素與下載計數。

+0

我對這個想法猶豫不決,因爲總是有這種可能性,下載動作的請求需要超過1000ms的時間來處理。 – Preacher