0

スプレッドシートgem を使用してネイティブ Excel ファイルを生成しています。これは CSV、XML ファイルではありません。ファイルの作成には、通常の Ruby コードが使用されます。生成された Excel ファイル ( に保存) は、メソッドStringIOを使用してクライアントに転送されます。のようなパラメーターがあるため、メソッドsend_dataが必要です。send_datadisposition

Excel のデータは、通常の HTML、JS リクエストと同様にコントローラー メソッドで取得されます。ただし、コントローラーで保護されたメソッドでスプレッドシートを生成するコードを配置しました。私がすべきようにビューではありません。

MVCデザインパターンに準拠した上記の問題に対するエレガントな解決策はありますか?

更新: 上記の問題に対する一般的な解決策はありませんが、少なくとも私は考えられるすべてのアイデアを知っています。

4

3 に答える 3

3

lib ディレクトリは、厳密には MVC 構造の一部ではないが、複数のモデル、ビュー、またはコントローラーで必要になるコードの場所として意図されています。必要に応じて持ち込めrequireます。

ただし、コードが 1 つのコントローラーでのみ必要な場合は、そのコントローラーのヘルパーにコードを配置しても問題ありません。そうすれば、自動でロードされ、指先で操作できます。さらに、それは理にかなっています。特定のコントローラーを支援するためのコードです。

いずれにせよ、コントローラーに残したままにしたり、ビューに押し込んだりしないでください。

于 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-Disposition']='attachment;filename="report .xls"' @voucherdatas = Voucherdata.find_all_by_pr_name(pr.pr_name) end

ビュー: export.html.erb

manager "reports/voucherdatas", :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. xls 生成ルーチンと ActionController のrenderメソッドをオーバーライドするメソッドを含む lib フォルダーに Excel ライブラリを作成します。
  2. xls としてレンダリングする必要があるモデルではto_excel、xls ルーチンに提供できるハッシュを生成する method と呼ばれるメソッドを実装します。
  3. このようにすると、本当に「Railsy」なものが得られます。コントローラーで呼び出すだけです

    render :xls => @モデル

于 2009-09-22T07:27:29.910 に答える