4

MVC についての私の理解では、SQL (または永続性関連の) クエリはモデル/コントローラー オブジェクトでのみ実行する必要があります。したがって、コントローラーに関する Rails 3 のドキュメントには、次のように記載されています。

[コントローラー] ビューでモデル データを使用できるようにして、そのデータをユーザーに表示できるようにします。

ただし、ドキュメントには、ビュー (HTML ヘルパー) コードでクエリを直接使用する例も含まれています。

select("post", "person_id", Person.all.collect {|p| [ p.name, p.id ] })
# Note the model query -----^

Rails 3では、ビューでクエリを実行することは一般的に受け入れられますか?それとも、そのようなクエリをModelまたはControllerオブジェクトに厳密に委譲する説得力のある理由はありますか? ドキュメンテーションは単に実証的なものですか、それともベスト プラクティスを例示するものですか?

4

2 に答える 2

6

これは単なる例示であり、一般的に従うべき良い例ではないと思います。これは、PHP で見られる SQL Spaghettis コードに十分近いものです。

現在、 Rails のアンチパターンの本を読んでいますが、モデル内のすべてのクエリをスコープすることを提案しています。コントローラーは、結果をビューに公開するモデルで定義されたメソッドにアクセスできます。

ただし、注意を払わないと、すぐに自分が太ったモデルを持っていることに気付く可能性があり、それを避けるために、この種のパターンに非常に役立つ名前付きスコープを使用できます。注意を払うべきもう 1 つの重要な規則は、 Rails に適用されるデメテルの法則です。これは、あるモデルが他のモデルの実装の詳細についてあまり知らなくてよいことを意味します。したがって、関連付けられたモデルに関連するクエリがある場合は、この関連付けられたモデルをスコープする必要があります。

最後に、次の記事(Jamis Buck 著) ( Skinny Controller, Fat Model ) は、このテーマについての良い読み物です。

于 2012-05-02T16:20:30.960 に答える
0

ビューでクエリを実行することは、非常に単純であっても、一般的には受け入れられません。コントローラーが重くなるのを避けるために、(ドキュメントにあるように) ヘルパーを作成し、そこにクエリを配置することをお勧めします。

もちろん、クエリを再利用したい場合は、おそらくスコープを使用して、モデルに配置することをお勧めします。

于 2012-05-02T21:21:00.690 に答える