我正在使用spreadsheet gem来生成本机Excel文件。这不是CSV,XML文件。普通的Ruby代码用于创建文件。生成的Excel文件(保存在StringIO
)使用send_data
方法转发给客户端。我需要send_data
方法,因为它的参数如disposition
。
Excel的数据在控制器方法中检索,就像普通的HTML,JS请求一样。但是我放置了代码以在控制器保护的方法中生成电子表格。不是我认为的观点。
对于符合MVC设计模式的上述问题,是否有一个优雅的解决方案?
更新:上述问题并非所有解决方案都受欢迎,但至少我知道所有可能的想法。
答案 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)
render
方法的方法。 to_excel
方法的方法,该方法生成一个可以提供给xls例程的哈希值。这样做,你会得到一些真正的“Railsy”。在您的控制器中,您只需致电
渲染:xls => @model