Rails 多个 CSV 导出按钮路由

Rails Multiple CSV Export Buttons Routing

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

我用一个按钮下载一个文件,但现在我添加了一个新参数来区分这两个按钮(和 link 到要下载的两个不同文件)并且它说 "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

有谁知道我可以做些什么来拥有这两个按钮?

我假设问题出在这个条件语句中params[:set] == 1这里所有的参数都是字符串。

it is saying "MISSING TEMPLATE".

 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 这应该可以解决您的问题。