我的视图表单中有一个下载按钮,它使用控制器中的“索引”操作
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
我的模型SomeVariable中的一些def self.to_csv方法,我在其中生成CSV文件。
无论如何都要检查下载是否正常,例如设置标志。 如果下载就行了 做一点事 其他 提出一些错误 端
我在索引动作中考虑过“开始救援”,但如果还有其他“更聪明”的实现分享,那将非常感激。
答案 0 :(得分:1)
send_file
可以替代您计划进行的操作。
您可以在How to download file with send_file?和API Dock
答案 1 :(得分: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