Rails多个CSV导出按钮的路由

时间:2018-07-02 16:07:25

标签: ruby-on-rails export-to-csv

我希望在页面上添加两个按钮,每个按钮都下载一个包含不同信息的不同CSV文件。但是,我正在努力将控制器路由到两个不同的下载位置。

我可以使用一个按钮下载一个文件,但是现在我添加了一个新参数来区分两个按钮(并链接到要下载的两个不同文件),并说“ MISSING TEMPLATE”。

这是我的控制器代码:

def show
    @shareholder = Shareholder.find(params[:id])
    respond_to do |format|
        format.html
        format.csv do
            if(params[:set] == 1) then
                send_data @shareholder.acquired_csv, filename: @shareholder.name + "-acquired-shares-#{Date.today}.csv" 
            end
            if(params[:set] == 2) then
                send_data @shareholder.summary_csv, filename:  @shareholder.name + "-sold-shares-#{Date.today}.csv" 
            end
        end
    end
end

这是我的操作项的代码:

action_item :acquired_shares_csv, only: :show do
  link_to 'Acquired Shares CSV', shareholder_path( format: :csv, id: params[:id], set: 2 ) 
end

action_item :sold_shares_csv, only: :show do
  link_to 'Sold Shares CSV', shareholder_path( format: :csv, id: params[:id], set: 1 )
end

有人知道我可以做两个按钮吗?

1 个答案:

答案 0 :(得分:0)

我认为问题在于此条件语句params[:set] == 1中的所有参数都在此处为字符串。

  

它说的是“模板缺失”。

 format.csv do
    if params[:set] == 1
       # ....
    end
    if params[:set] == 2
       # ....
    end
 end

在这种情况下,params[:set]是一个字符串并变成"1""2",这两个条件语句都将被跳过,并且Rails无法找到模板并引发MISSING TEMPLATE错误。

将代码从params[:set] == 1更改为params[:set] == "1"params[:set].to_i == 1,这样可以解决您的问题。