代码之家  ›  专栏  ›  技术社区  ›  Greg Dan

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

  •  0
  • Greg Dan  · 技术社区  · 15 年前

    我正在使用 spreadsheet gem生成本地Excel文件。这不是csv,xml文件。普通的Ruby代码用于创建文件。生成的Excel文件(保存在 StringIO )转发到客户端时使用 send_data 方法。我需要 森达数据 方法,因为它的参数如下 disposition .

    Excel的数据在Controller方法中检索,就像普通的HTML、JS请求一样。但是,我把生成电子表格的代码放在了受控制器保护的方法中。从我的角度看不是。

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

    最新消息:对于上述问题,目前还没有一个广受欢迎和被所有人接受的解决方案,但至少我知道所有可能的想法。

    3 回复  |  直到 9 年前
        1
  •  0
  •   Milan Novota    15 年前
    1. 在lib文件夹中创建一个Excel库,其中包含XLS生成例程以及一个重写ActionController的方法 render 方法。
    2. 在应呈现为XLS的模型中,实现一个名为 to_excel 方法,生成可以提供给XLS例程的哈希。
    3. 这样做,你会得到一些真正的“讽刺”。在你的控制器里,你只要打电话

      渲染:xls=>@模型

        2
  •  3
  •   Pesto    15 年前

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

    但是,如果您只需要一个控制器中的代码,那么您也可以将其放入该控制器的助手中。这样它就可以自动加载并在您的指尖。另外,它是有意义的:它是帮助特定控制器的代码。

    不管怎样,不要把它留在你的控制器里,或者试图把它嵌入你的视图中。

        3
  •  0
  •   philipth    15 年前

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

    控制器: DEF出口 pr=program.find(会话[:pr_id]) headers['content-type']=“应用程序/vnd.ms excel” headers['content-dispositon']='附件;filename=“report.xls”' @voucherdatas=voucherdata.find_all_by_pr_name(pr.pr_name) 结束

    视图:export.html.erb

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

    路线.rb map.resources:reports,:collection=>:export=>:get

    无论你想在哪里连接

    链接“导出为Excel”,导出“报告”URL,:popup=>true