2017-07-28 80 views
0

我在視圖的形式,這在控制器Ruby on Rails的:如何檢查是否一個CSV文件下載

def index 
    respond_to do |format| 
    format.html { @some_variables = some_variables.page(params[:page]) } 
    format.csv { 
     render csv: some_variables, headers: SomeVariable.csv_headers 
    } 
    end 
end 

還有一些高清self.to_csv方法使用一個「指數」行動有一個下載按鈕在我的模型SomeVariable中,我生成了CSV文件。

有無論如何檢查下載是否正常,例如設置一個標誌。 如果下載就OK 做一些 別的 提出了一些錯誤 結束

我想過在指數行動「開始救市」,但如果有任何其他的「聰明」的實現共享,將超過讚賞。

回答

1

send_file可以是您計劃要做的一個很好的選擇。 你可以在這裏找到更多的信息How to download file with send_file?API Dock

+0

感謝您的評論Stephane。 下載部分已經正常工作。我會尋找一種方法來檢查它是否出錯... – yusefu

+0

然後我認爲你使用'rescue'的想法是好的。 –

0

我想出了一個簡單的解決方案,我選擇了一個after_action。 只有當動作成功之前,after_action才運行,在這種情況下,如果下載被執行,即如果csv渲染得到202,我會嘗試做一些事情。 因此,如果動作索引在那之後執行,我運行方法例如更新下載的時間。

class SomeVariableController < ApplicationController 

after_action :update_downloaded_time, only: :index, if: -> {current_user.admin?} 

def index 
    respond_to do |format| 
    format.html { @some_variables = some_variables.page(params[:page]) } 
    format.csv { 
     render csv: some_variables, headers: SomeVariable.csv_headers 
    } 
    end 
end 

def update_downloaded_time 
    @some_varibale.update_all(downloaded_at: Time.now) 
end 
相關問題