Ruby on rails 生成Excel电子表格的代码应该放在哪里?

Ruby on rails 生成Excel电子表格的代码应该放在哪里?,ruby-on-rails,export-to-excel,Ruby On Rails,Export To Excel,我正在使用gem生成本机Excel文件。这不是CSV、XML文件。普通的Ruby代码用于创建文件。生成的Excel文件(保存在StringIO中)使用send\u data方法转发给客户端。我需要send\u data方法,因为它的参数像disposition Excel的数据在控制器方法中检索,就像普通HTML、JS请求一样。但是,我将生成电子表格的代码放在控制器保护的方法中。我不应该这样看 对于上述问题,是否有符合MVC设计模式的优雅解决方案 更新:对于上述问题,没有流行且被所有人接受的解决

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

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

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


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

lib目录是一个存放代码的地方,这些代码不是严格意义上的MVC结构的一部分,而是多个模型、视图或控制器所需要的。需要时,可以使用
require
将其引入

然而,如果您只需要在单个控制器中使用代码,那么您最好将其放入该控制器的助手中。这样它就可以自动加载,触手可及。此外,它还有意义:它是帮助特定控制器的代码


无论哪种方式,都不要将其留在控制器中,也不要试图将其插入视图中。

lib目录是用来存放代码的地方,这些代码不是严格意义上的MVC结构的一部分,但多个模型、视图或控制器都需要这些代码。需要时,可以使用
require
将其引入

然而,如果您只需要在单个控制器中使用代码,那么您最好将其放入该控制器的助手中。这样它就可以自动加载,触手可及。此外,它还有意义:它是帮助特定控制器的代码


无论哪种方式,都不要将其留在控制器中,也不要试图将其插入视图中。

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

控制器: def导出 pr=程序.find(会话[:pr\u id]) 标题['Content-Type']=“应用程序/vnd.ms excel” 标题['Content-Dispositon']='附件;filename=“report.xls”' @VOUCHERDASS=Voucherdata。按\u pr\u名称(pr.pr\u名称)查找\u all\u 结束

视图:export.html.erb

经理 “报告/凭证数据”,:object=>@voucherdatas%> routes.rb map.resources:reports,:collection=>{:export=>:get}

无论你想要链接到哪里


链接到“导出为Excel”,导出报告\u url,:popup=>true

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

控制器: def导出 pr=程序.find(会话[:pr\u id]) 标题['Content-Type']=“应用程序/vnd.ms excel” 标题['Content-Dispositon']='附件;filename=“report.xls”' @VOUCHERDASS=Voucherdata。按\u pr\u名称(pr.pr\u名称)查找\u all\u 结束

视图:export.html.erb

经理 “报告/凭证数据”,:object=>@voucherdatas%> routes.rb map.resources:reports,:collection=>{:export=>:get}

无论你想要链接到哪里

链接到“导出为Excel”,导出报告\u url,:popup=>true

  • 在lib文件夹中创建一个excel库,其中包括xls生成例程以及覆盖ActionController的
    render
    方法的方法
  • 在一个应该呈现为xls的模型中,实现一个名为
    to_excel
    的方法,该方法生成一个可以提供给xls例程的散列
  • 这样做,你会得到一些真正的“讽刺”。在控制器中,您只需呼叫

    render:xls=>@model

  • 在lib文件夹中创建一个excel库,其中包括xls生成例程以及覆盖ActionController的
    render
    方法的方法
  • 在一个应该呈现为xls的模型中,实现一个名为
    to_excel
    的方法,该方法生成一个可以提供给xls例程的散列
  • 这样做,你会得到一些真正的“讽刺”。在控制器中,您只需呼叫

    render:xls=>@model


  • 助手方法在控制器中不是故意可用的。我将不得不包括他们或通过代理打电话。XLS文件和XML文件并没有太大区别。两者都用作我的数据表示格式。在视图中生成XML是绝对正确的。辅助方法在控制器中不是故意可用的。我将不得不包括他们或通过代理打电话。XLS文件和XML文件并没有太大区别。两者都用作我的数据表示格式。在视图中生成XML是绝对正确的。是的,这似乎是rails样式。是的,这似乎是rails样式。