下载模板xls中的数据

Download of data in template xls

我想知道如何重定向到模板,并使用此模板下载它,我尝试了一些方法,使用我在 pdf 中的模板,但它不起作用。 这是我走了多远:

def download
    @reversals = Reversal.where("created_at >= ? and created_at <= ?", params[:start_date], params[:end_date])
    respond_to do |format|
      format.xls {           
           send_data(:filename => 'estornos.xls', :disposition => 'attachment', :action => :index, :layout => false, :template => 'reversals/download.xls.erb', locals: {:reversals => @reversals})
        }
    end
 end

这里在我看来调用:

<%= form_for :reversal, method: :post, url: download_reversals_path do %>
        <%= date_select "reversal", "start_date" %>
        <%= date_select "reversal", "end_date" %>
    <%= submit_tag 'Download' %>
<% end %>

这是我的路线:

resources :reversals do
    collection do
      post 'download', :defaults => { :format => 'xls', :template => 'download.xls.erb'}
    end
  end

我已经在mime_type中输入了xls的类型。我已经安装了模板,但无法连接两者。模板与方法,同名

经过多次测试和时间我找到了如何做:

路线:

post 'reversals/download', to: "reversals#download_pdf", as: 'download', format: 'xls'

控制器:

def download_pdf
    report_start_date= build_date_from_params("start_date", params[:reversal])
    report_end_date= build_date_from_params("end_date", params[:reversal])
    @reversals = Reversal.all.where("created_at >= ? and created_at <= ? or created_at = ? and created_at = ? ", report_start_date, report_end_date, report_start_date, report_end_date)
    @start_date = report_start_date
    @end_date = report_end_date
    respond_to do |format|
      format.html
      format.xls {
        response.headers['Content-Disposition'] = 'attachment; filename=" estornos-' + (Time.now).to_s + '.xls"'
        render "download.xls.erb"
       }
    end
end
def build_date_from_params(field_name, params)
      Date.new(params["#{field_name.to_s}(1i)"].to_i, 
           params["#{field_name.to_s}(2i)"].to_i, 
           params["#{field_name.to_s}(3i)"].to_i)
end

mime_types:

Mime::Type.register "application/xls", :xls

在我的索引视图中

<%= form_for :reversal, method: :post, url: download_path, format: 'xlsx' do %>
<table>
  <tr>
    <td>DATA DE LANÇAMENTO INICIAL:</td>
    <td></td>
    <td><%= date_select "reversal", "start_date" %></td>
    <td rowspan="2" align="center"><%= submit_tag 'Download xlsx', class: 'btn btn-secundary' %></td>
  </tr>
  <tr>
    <td>DATA DE LANÇAMENTO FINAL:</td>
    <td></td>
    <td><%= date_select "reversal", "end_date" %></td>
  </tr>
</table>
<% end %>

如果你想下载到excel,xls格式不行,必须是xlsx,只需要在mime类型中注册xlsx格式,在视图中传入格式:xlsx,在路由 tb 中创建或更改格式为:xlsx 的路由。不要忘记使用 nameoffunction.xlsx.erb 创建视图。