0

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

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

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

更新:对于上述问题没有流行和接受的所有解决方案,但至少我知道所有可能的想法。

4

3 回答 3

3

lib 目录是存放不严格属于 MVC 结构的代码的地方,但多个模型、视图或控制器将需要该代码。它可以在require需要时带入。

但是,如果您只需要单个控制器中的代码,则最好将其放入该控制器的助手中。这样它就会自动加载并且触手可及。另外,这很有意义:它是帮助特定控制器的代码。

无论哪种方式,都不要将它留在你的控制器中或尝试将它嵌入到你的视图中。

于 2009-09-21T14:17:37.663 回答
0

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

控制器:def export pr = Program.find(session[:pr_id]) headers['Content-Type']="application/vnd.ms-excel" headers['Content-Dispositon']='attachment;filename="report .xls"' @voucherdatas = Voucherdata.find_all_by_pr_name(pr.pr_name) 结束

查看:export.html.erb

经理“报告/凭证数据”,:object =>@voucherdatas %>

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

无论你想要链接给什么

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

于 2009-09-21T20:07:01.367 回答
0
  1. 在您的 lib 文件夹中创建一个 excel 库,其中包含您的 xls 生成例程以及覆盖 ActionController 方法的render方法。
  2. 在应该呈现为 xls 的模型中,实现一个名为to_excelmethod 的方法,该方法生成可以提供给 xls 例程的哈希值。
  3. 这样做,你会得到一些真正“Railsy”的东西。在您的控制器中,您只需调用

    渲染 :xls => @model

于 2009-09-22T07:27:29.910 回答