1

「Category」という名前のモデルがあります。これは、データベースに保存されている説明の単なるリストです。ここで、カテゴリの説明をドロップダウン リストに表示します。

正しいことは、アクションでインスタンス変数を作成することでしょうか?それとも、ビューで直接@categories = Category.all使用しますか?Category.all

ビューでモデルを直接使用することに対する欠点/アドバイスは何ですか?

4

3 に答える 3

1

ビューでCategory.allが1回だけ呼び出されている場合は、直接記述してもかまいません。それ以外の場合は、Railsの規則に従ってインスタンス変数を作成するよりも、ヘルパーを作成することをお勧めします。何かのようなもの

def all_categories
  @all_categories ||= Category.all
end

同じビューでも複数回使用されている場合は、単一のクエリを実行します。

于 2012-08-08T11:01:26.357 に答える
0

一般的な方法は、その要求に固有のデータのインスタンス変数をコントローラーに作成することです。

カテゴリの例では、ビューから直接クエリを実行するのが適切です。

そのアクションのビュー、部分的、またはサイト全体で使用されている場合はレイアウトに含まれる可能性があります。

于 2012-08-08T08:39:25.233 に答える
0

簡単な経験則では、結果を2回使用するため、コードの重複を節約できる場合にのみ、メソッドの結果をインスタンス変数に保存します。もう1つの経験則は、ビューに副作用があるメソッドを呼び出さないことです。この場合、一度は副作用のない方法を使用しているようですので、ビューに入れても大丈夫です。

つまり、モデルメソッドの呼び出しは、マークアップ要素と混合されているため、コントローラーよりもビューで見失う方がはるかに簡単です。これにより、Category.allも呼び出す新しいコードをビューに追加するときに、以前にCategory.allを呼び出したことを見逃してしまう可能性があります。あなたがCategory.allのインスタンス変数を持っていることにコントローラーで簡単に気付く代わりに、あなたはあなたの全体像を通り抜けるか、そうするのを忘れるかのどちらかで立ち往生しています。

インスタンス変数を使用するもう1つのケースは、ビューを再利用しやすくすることです。ビューをCategoryクラスに緊密に結合する代わりに、インスタンス変数で行われる呼び出しを、同様の方法で表示できる他のモデルにも適用できるように十分に汎用的にすることができます。このようにインスタンス変数を使用すると、Rubyが提供するダックタイピングを利用するのに役立ちますが、さまざまな種類のオブジェクトで実際に使用できるメソッドの種類を覚えたり調べたりする作業と、物事を一般的にすることの容易さを比較検討する必要があります。これは、インスタンス変数内にある可能性があります。

于 2012-08-08T10:30:51.530 に答える