【问题标题】:Controllers and downloading files with 'send_data'控制器和使用“send_data”下载文件
【发布时间】:2015-03-02 16:09:04
【问题描述】:

我可以很好地创建 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”函数是用来从控制器开始下载的。

【问题讨论】:

  • 您谈论的是 .xls 块,但您的问题中只有 html 和 csv。

标签: ruby-on-rails ruby excel csv


【解决方案1】:

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

尝试像这样更改您的第一行 - 这使用命名路由,由于各种原因更好:

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

【讨论】:

  • 谢谢,但我遇到了这个错误,ActionController::UnknownFormat。我希望表单和控制器操作能够使用任一按钮呈现 html 和 csv。
  • 啊,是的,抱歉,您需要先注册该 mime 类型 (csv),然后才能使用该格式的响应进行响应。这是在您的配置中完成的。你可能最好遵循这个,特别是如果你也想做 xls:railscasts.com/episodes/…
【解决方案2】:

好的,我找到了答案here

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

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

【讨论】:

  • 那只会通过参数中的format=csv,我认为这是我的guestlist_bookings_path(format: "csv") 所做的。结果不一样吗?
  • 是的,但我希望同一个表单能够在同一个表单块中执行这两个操作。不过,你让我走上了正确的道路,谢谢。
  • 啊,是的,我刚刚看到你的问题中的“两个提交按钮”:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 2011-08-06
  • 2019-01-02
相关资源
最近更新 更多