0

モデルのコンテンツに基づいてグラフ (通常は「表示」ビューでインライン SVG として表示される) を生成するためのカスタム Ruby コードをいくつか用意しました。

描画コードをどこに置くべきか迷っています。私が見ると、次のことができます。

  1. それをモデルに入れて、@my_object.chart_as_svg自分のビューで呼び出すことができます...しかし、これはMVCから逸脱します
  2. のようにビューに入れshow.svg.erb、コントローラが format.svg に応答するようにします
  3. 別のアクションとしてコントローラーに入れます
  4. ヘルパーに入れて...

これに関する一般的な知恵は何ですか?

4

2 に答える 2

1

他の目的でチャート コードを再利用する可能性があると思われる場合は、それをクラスにして、入れてlib、コントローラーで次のようなことができるように設定します。

@chart = MyChart.new(:data => @my_object.data_method, :title => 'Foo Chart', ....)
send_data @chart.to_svg, ...

..

.to_pngこのようにして、モデルを台無しにすることなく、他のオプションを追加したり、追加したりして拡張できます。

于 2013-06-12T20:15:35.740 に答える
0

IMO:すべての少し!あなたのリストを下に行く:

  1. あなたのオブジェクトにはチャートがあるので、間違いなく持っているはずです@obj.chartが、チャートはモデルの一部ではありません.したがって、別のパッケージ/モジュール/オブジェクト/などの一部として必要です
  2. チャートのRubyオブジェクトであるIMHOは、自分自身をHTMLビューに変換する方法を「知っている」べきではありません。それはパーシャルの仕事です - _chart.svg.erb_chart_typeB.svg.erb- しかし、その情報を変換する方法を「知っている」必要があります-カウント、平均、パーセンテージなど。パーシャルはそれらの異なる「フォーマット」を消費します。
  3. ある時点で、API を介してチャート データに直接アクセスしたくなるに違いありません。たぶん、自分のものをプラットフォームに変えているのかもしれませんし、現在のページに AJAX 更新を行っているのかもしれません。関係ありません。最終的には、一部のコントローラー アクションでチャート データに直接アクセスする必要があります。
  4. ビューのパーシャルから複雑なものをすべて取り出してヘルパーに変換する必要がありますが、パーシャルは引き続き「スタイリング」を担当する必要があります。つまり、パーシャルはチャートの最小のアトミック ビューを生成する必要があります (チャートのみで、チャート以外は何もありません)。ただし、パーシャルは、チャートを Web ページに含めたい場合に一般的に表示したいものである必要があります。

編集: 他の回答を少し読んで、別の仮定があります: サーバーで画像を生成して提供するのではなく、チャート情報を取得し、Web ページで Javascript を介して画像を生成すると仮定しています。後者を行う場合は、チャート クラスの一部として作成します。これは、データを変換できる別の「形式」です。

于 2013-06-12T20:42:20.867 に答える