5

Railsアプリには、3つのモデル(Posting、Shop :: Items、Directory :: Items)があります。すべてのモデルには、他のモデル(ユーザー、カテゴリ、都市など)との関係があります。私がメインページに表示しなければならないこのすべての情報。アイテムのページ化されたリストのように見えるはずです。DBにpostgresを使用しています。
このようなコードをコントローラーに記述できます。

@postings = Posting.includes(:category, :subcategory, :user, :city).all
@directory_items = Directory::Item.includes(:category, :user, :city).all
@shop_items = Shop::Item.includes(:category, :user, :city, :phone).all

この結果を並べ替えます。しかし、それは最善の方法ではありません。

2番目の解決策は、ActiveRecordを省略したカスタムクエリを作成することです。しかし、このクエリは非常に大きく、サポートするのは難しいでしょう(そこには多くの結合があります)
DBクエリの量が最も少ない場合の最良の解決策は何ですか?(これはメインページなので、非常に高速に動作するはずです)。

4

2 に答える 2

2

ここには速くない解決策がいくつかあります。

または、スフィンクスの宝石を考えてスフィンクスを使用することもできます。このように、それは速くてきれいになります。

ThinkingSphinx.search classes: [Posting, Shop::Items, Directory::Items], page: params[:page] || 1, per_page: 10
于 2013-01-11T09:10:42.460 に答える
0

クエリはキャッシュされるため、並べ替えのみに時間がかかります。あまり多くのアイテムを表示しない場合、開発者の読みやすさは、これを最適化するためのコストをはるかに上回ります。パフォーマンスが本当にボトルネックである場合は、いつでもそれを改善できますが、それでも、このコードを過度に複雑にする代わりの方法があります。

于 2013-01-11T14:51:43.577 に答える