使用' send_data'控制器和下载文件

时间:2015-03-02 16:09:05

标签: ruby-on-rails ruby excel csv

我可以创建xl和csv文件格式,并希望在表单中为它们创建下载链接。

用户可以使用此表单生成对记录的搜索

=simple_form_for :guestlist_booking_search, controller: 'guestlist_bookings_controller', action: 'index', method: :get do |f|
  %fieldset
    %legend Guestlist Booking Search
    = f.input :lastname
    = f.input :start, as: :string, class: "form-control auto_picker1", :input_html => { :class => 'auto_picker1', value: guestlist_booking_search.start.strftime('%d-%m-%Y %H:%M') }
    = f.input :finish, as: :string, class: "form-control auto_picker2", :input_html => { :class => 'auto_picker2', value: guestlist_booking_search.finish.strftime('%d-%m-%Y %H:%M') }
    = f.submit "Submit"
    = f.submit "Download CSV", name: "download_csv"

因此表单有两个提交按钮,我想要一个处理搜索并显示结果,另一个处理搜索并开始下载csv文件。

所以在我的索引动作中我有这个

  def index
    if params[:download_csv]
      respond_to do |format|
        format.html
        format.csv { send_data @guestlist_bookings.to_csv } 
      end
    end
  end

guestlist_bookings变量在before块中设置(生成并显示搜索工作正常)。

我似乎无法解决的是如何让文件开始下载。目前没有.xls块的响应。根据我的理解,'send_data'功能用于从控制器开始下载。

2 个答案:

答案 0 :(得分:1)

我认为您的问题是它正在评估format.html块,而不是format.csv块,因为您还没有告诉它所需的格式是csv。

尝试改变你的第一行 - 这会使用一个命名路线,由于各种原因更好:

=simple_form_for :guestlist_booking_search, url: guestlist_bookings_path(format: "csv"), method: :get do |f|

答案 1 :(得分:0)

好的答案我发现here

= f.submit "Go"
= f.submit "CSV", value: :csv, name: :format

基本上你需要在表单运行之前设置格式。