控制器和下载文件与'send_data'

我可以创buildxl和csv文件格式,并且希望在表单中为它们创build一个下载链接。

用户可以使用此表单生成loggingsearch

=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" 

所以表单有两个提交button,我想要一个处理search并显示结果,另一个处理search并开始下载一个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_bookingsvariables设置在before块(生成并显示search工作正常)。

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

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

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

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

好的,我在这里find的答案

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

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