1

コントローラー->ビューの相互作用に何かが欠けていると感じているので、ここに私の質問があります。

大量のデータを生成するコントローラー アクションがあります。

@第一、第二第三

各変数は、1 つの html ブロッ​​ク (部分) に対してビューに表示されます。

これらの 1 つまたは複数が空になることがありますが、他のものを表示したいと思います。

この問題に対処する私の解決策は、コントローラーで変数を文字列 (「データなし」) に設定することです。通常、データは何らかの配列であるため、実際のデータがあるかどうかを確認するためにビューで文字列をテストし、それに応じて応答します。

その上、データが常に同じパーシャルで表示されるとは限らないユースケースもあります。正しいパーシャルを呼び出す前に、いくつかの条件でそれを実行できることはわかっています。

私が念頭に置いている種類の問題の良い例は、表示されるデータに応じて一部のアイテムが欠落したり変更されたりするダッシュボードです。

私はすでにこれらのユースケースを機能させていますが、ビュー内に多くのロジックを配置することで、MVC を正しく実行していないように感じます。この状況に対処するために、レール固有かどうかに関係なく、より良い設計パターンはありますか?

4

3 に答える 3

0

これはドレーパーの仕事のようです

DraperView-Modelは、コントローラーとビューの間に位置するMVCミックスにを挿入し、モデルを装飾し、ビューレイヤーとモデルレイヤーの両方から分離したまま、オブジェクト指向の方法ですべてのカスタムビューロジックを処理します。

たとえば、DraperのRailsCastを見てください。かなりいいです(そしてあなたがそれについて考えるならば論理的です)。

于 2012-08-22T12:54:04.660 に答える
0

現在の値を使用して存在するかどうかを確認できますか? MVCで。

コントローラー/ビューでこの状態を確認してください。

if @first.present?
  do somthing
end
于 2012-08-22T10:58:25.857 に答える
0

あなたのアプローチに深刻な問題は見られません。データの表示方法の詳細を決定するいくつかのロジックがあります。これを逃れることはできません。唯一の問題は、このロジックがどこに行くべきかということです (悲しいかな、それは消えません)。ビューに入れるのが最善の決断だと思います。

ただし、コントローラーとビューの間のインターフェイスをできるだけ明確にすることをお勧めします。変数を nil に設定すると、「データなし」に設定するよりも明確になります。ビューが何をすべきかを認識できるように、モデルにさらに変数を追加する必要がある場合があります。これは、たとえば、通常は配列ですが、データの表示方法をビューに伝える文字列を保持する場合がある変数を使用するよりも優れています。

于 2012-08-22T12:30:35.743 に答える