私はモデルがCategory
であると仮定します。has_many
Items
です。今、私はの表を提示したいと思います。のさまざまな属性でソートされました。商品番号です。たとえば、最も高い価格の項目を含むカテゴリを上部に表示します。または、最高の定格項目に基づいてカテゴリをソートします。または、最新のアイテムに基づいてカテゴリをソートする(すなわち、最新のアイテムを含むカテゴリが最初になる)。ActiveRecordモデルをサブモデル属性でソートする?
class Category < ActiveRecord::Base
has_many :items
# attributes: name
end
class Item < ActiveRecord::Base
belongs_to :category
# attributes: price, rating, date,
end
どのアプローチが最適ですか?
- ソート用の属性(最高の商品価格またはそのカテゴリ内のアイテムの最高の評価)を保持するために、カテゴリモデルに追加の列を維持します。私は以前これをやったことがありますが、ちょっと醜いですし、アイテムが変わるたびにカテゴリモデルを更新する必要があります。
- 注文句にはいくつかの魔法のSQL呪文がありますか?
- 他に何かありますか?
私が思いつくのは、含まれているアイテムの最大価格でソートされたカテゴリのリストを作成するためのSQLです。
select categories.name, max(items.price) from categories join items group by categories.name
これがどのようにRailsコードに変換されるのかよくわかりません。このSQLは、カテゴリーを最新のアイテムの価格でソートしたければ機能しません。私は実際に明らかなパフォーマンス上の理由からこれをデータベースに保存しようとしています。
これは正しい方向に向いていますが、私は単純な結合以上のものが必要です。私の部分的な解決策は上記ですが、私は柔軟性が必要であり、Railsコードについてはわかりません。 – ideasasylum