3

Ruby on Rails ブログ プロジェクトで、さまざまなモデルを多数セットアップしました。現在、さまざまなモデル タイプは、記事、クイック ヒント、引用、および定義です。これらすべてを作成時間順に並べた単一のフローで表示したいページを作成しました。

質問: すべてのコンテンツ タイプから選択された特定の数のアイテムを、作成日順に並べて取得するスマートで効率的な方法は何ですか。

うまくいけば、例示的な擬似コード:

Db.load([:Tip, :Quote, :Article, :Definition]).order_by(:created_at).limit(10)

私がこれまでに思いついた最善の解決策は、すべてのカテゴリの 10 個のアイテムをロードし、それらを並べ替えて、並べ替えられたリストの最新の 10 個を選択することです。:P

4

3 に答える 3

0

それらを組み合わせるだけです。

(Tip.all + Quote.all + Article.all + Definition.all).order_by(:created_at).limit(10)

または

tips = Tips.all.limit(10)
quotes = Quotes.all.limit(10)
(tips + quotes).order_by(:created_at).limit(10)

アイデアを得ますか?

おそらく役立つ同様の質問

于 2013-09-05T18:01:51.177 に答える
0
[Tip, Quote, Article, Definition].map{|model_name| model_name.order(:created_at).first(10)}
于 2013-09-05T18:09:14.543 に答える
0

したがって、私が望むことを行う方法は、Post などのスーパークラスを作成し、他のすべてのコンテンツ タイプをこのモデルから継承させることです。これにより、すべてのサブクラス属性がコンテンツ タイプ間の区別を容易にする「type」属性とともに「posts」テーブルに保持される単一テーブル継承スキームが作成されます。すべてのコンテンツ タイプを通常どおり使用できるはずですが、すべてのコンテンツ タイプを同時にクエリおよびソートできる Posts モデルも取得します。

テクニックの詳細については、こちらをご覧ください

于 2013-09-22T15:08:32.557 に答える