2009-08-25 9 views
0

私はポストとカテゴリモデルを持っているとします。各ポストはカテゴリに属しています。ほとんどすべてのページで、私はカテゴリのリストを取得しています:Rails:不要なデータベースクエリを削除する

これはカテゴリオブジェクトの配列を生成します。今度は、各カテゴリにid属性とname属性があるとします。投稿を見るときに、カテゴリ名を表示したい。

私はもともとこのような何かを行うことによって、カテゴリ名を得ていた。

@post = Post.find(params[:id], :include => :category) 

は、しかし、私はすでに@categories配列を持っていることを実現します。私がすでにカテゴリのリストを持っているときに含めることは不要です。代わりに、私は今、配列の検索を実行しています:

category = @categories.find { |category| @post.category_id == category.id }.name 

これは機能し、クエリの数を減らします。私の質問は、これがキャッシングなしでクエリの数を減らすための最良の方法である場合です。

答えて

2

これは完全に賢明です。

唯一のリスク(およびそれは非常に小さいものです)は、競合状態になる可能性があることです。たとえば、カテゴリリストを取得した後に誰かが投稿のカテゴリを変更したり、カテゴリのリストを更新したりすることができます。その後、カテゴリ名をクリックしてそのカテゴリのすべての投稿のリストを取得すると、そのようなことを処理していない限り、おそらくエラーが発生します。

IMO、それは支払うために非常に小さい価格です。

+0

良い点。 unf。票が残っていません:) –

1

ここで唯一の問題は、カテゴリリストが不要であると判断して削除することです。

それ以外の場合は、良い解決策があります。

0

カテゴリが多数ある場合はどうなりますか?あなたはまだそれらをすべて取り出すつもりですか?を実行すると、SQLが常にRubyに勝つため、はるかに優れています。

+0

私は20のカテゴリーしか言いません。私はいつもこれらのカテゴリを取得する必要があります。 – Homar

関連する問題