我应该在哪里放置生成Excel电子表格的代码?

时间:2009-09-21 13:53:59

标签: ruby-on-rails export-to-excel

我正在使用spreadsheet gem来生成本机Excel文件。这不是CSV,XML文件。普通的Ruby代码用于创建文件。生成的Excel文件(保存在StringIO)使用send_data方法转发给客户端。我需要send_data方法,因为它的参数如disposition

Excel的数据在控制器方法中检索,就像普通的HTML,JS请求一样。但是我放置了代码以在控制器保护的方法中生成电子表格。不是我认为的观点。

对于符合MVC设计模式的上述问题,是否有一个优雅的解决方案?

更新:上述问题并非所有解决方案都受欢迎,但至少我知道所有可能的想法。

3 个答案:

答案 0 :(得分:3)

lib目录意味着代码的位置不是MVC结构的严格组成部分,但是多个模型,视图或控制器都需要它。它可以在需要时带入require

但是,如果您只需要单个控制器中的代码,那么您也可以将其放入该控制器的帮助程序中。这样它就会自动加载并触手可及。此外,它是有道理的:它是帮助特定控制器的代码。

无论哪种方式,都不要将其留在控制器中或尝试将其楔入您的视野中。

答案 1 :(得分:0)

我今天刚刚为我的应用做了这个希望这有助于一个excel o / p;从未使用过任何插件

控制器: def出口 pr = Program.find(session [:pr_id]) 头[ '内容 - 类型'] = “应用程序/ vnd.ms-EXCEL” 头[ '内容Dispositon'] = '附件;文件名= “的report.xls”' @voucherdatas = Voucherdata.find_all_by_pr_name(pr.pr_name) 端

view:export.html.erb

       经理           “reports / voucherdatas”,:object => @voucherdatas%>   

的routes.rb  map.resources:reports,:collection => {:export =>:get}

如果你想要链接提供

link_to“导出为Excel”,export_reports_url,:popup => true

答案 2 :(得分:0)

  1. 在lib文件夹中创建一个excel库,其中包含xls生成例程以及覆盖ActionController的render方法的方法。
  2. 在应该呈现为xls的模型中,实现一个名为to_excel方法的方法,该方法生成一个可以提供给xls例程的哈希值。
  3. 这样做,你会得到一些真正的“Railsy”。在您的控制器中,您只需致电

    渲染:xls => @model