【问题标题】:XLS Format in Ruby on Rails ResourcesRuby on Rails 资源中的 XLS 格式
【发布时间】:2014-10-01 19:46:40
【问题描述】:

在 RoR 应用程序中,我希望索引资源下载 xls 文件。

目前,我可以下载文件,但它需要一个指向我创建的路径的链接

link_to subscribers_path(:format => :xls)

理想情况下,就像它自己的subscribers_path 一样添加格式xls,我不想要带有索引的html 格式的视图。 我的文件结构

/subscribers
   index.html.erb
   index.xls.erb

和我的控制器代码

def index
  @subscribers = Subscriber.all
  respond_to do |format|
    format.html
    format.xls #{send_data @subscribers.to_csv(col_sep: "/t")}
  end
end

我试图删除 html 以查看它是否会默认为另一个路径,但它显示 unknownformat 错误。我还尝试删除 index.html.erb 文件以查看是否会回退到同名的另一种格式,但这没有用。

希望我的目标很明确:如何使用资源索引路径来链接 xls 而不是 html 格式?

【问题讨论】:

  • 我建议你检查一下 rails 是否支持开箱即用的 xls,我想不会。因此出现了未知的格式错误。要执行您的建议,它将以某种方式添加 xls 作为支持的格式。我没有做过的事情。仅供参考:RoR 使用请求的 Accept 标头中的 mime-type 来确定要呈现的模板。
  • 我得到它来渲染我想要的输出,但我怎样才能让它下载输出而不是渲染?

标签: ruby-on-rails ruby xls


【解决方案1】:

首先,澄清一下:是的,Rails 确实完全支持 XLS。

要使用它,只需在config/initializers/mime_types.rb 下添加以下行:

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

然后按照作者的做法,把格式改成xls,创建一个index.xls.erb

现在,要回答您的问题,有多种方法:

我想到的第一件事就是更改请求格式。在您的控制器中:

class SubscriberController < ActionController::Base
  before_filter :change_format

  def index
    @subscribers = Subscriber.all
    respond_to do |format|
      format.xls #{send_data @subscribers.to_csv(col_sep: "/t")}
    end
  end

  private
    def change_format
      request.format = "xls"
    end
end

应该还有十几种其他方法可以做到这一点,但我更喜欢这个。

【讨论】:

    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 2022-01-01
    • 2011-05-25
    • 2011-04-13
    • 2011-05-20
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    相关资源
    最近更新 更多