Ruby On Rails:如何检查是否下载了csv文件

时间:2017-07-28 02:38:48

标签: ruby-on-rails ruby csv downloadfile

我的视图表单中有一个下载按钮,它使用控制器中的“索引”操作

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文件。

无论如何都要检查下载是否正常,例如设置标志。 如果下载就行了  做一点事 其他  提出一些错误 端

我在索引动作中考虑过“开始救援”,但如果还有其他“更聪明”的实现分享,那将非常感激。

2 个答案:

答案 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