私は2つのモデルを持っています:
#Product
class Product < ActiveRecord::Base
has_and_belongs_to_many :categories
attr_accessible :name
...
end
#Category
class Category < ActiveRecord::Base
has_and_belongs_to_many :products, :order => "name ASC"
attr_accessible :name, :priority
end
そして、優先順位の最も高いカテゴリ、次に製品名で製品を並べたいと思います
たとえば、次の 3 つのカテゴリがあります。
- お菓子、優先度=3
- 果物、優先度 = 1
- デザート、優先度 = 2
3 製品:
- デザートとスイーツのカテゴリーを持つチョコレートアイスクリームは、
- デザートやスイーツのカテゴリーがあるクッキー、
- スイーツ、フルーツ、デザートのカテゴリーがあるキウイ
そして、私はそれらを次のように注文したいと思います:
- キウイ(フルーツが最優先なので最初)
- チョコレート アイス クリーム (2 番目は、チョコレートがクッキーよりも優先され、両方のカテゴリが同じ優先度であるため)
- クッキー
Railsでそれを行うにはどうすればよいですか? 私は自分の製品を複製したくありません。
Category.order("priority ASC").each do |cat|
cat.products.order("name ASC").each do |product|
end
end
ただし、その場合、キウイ、チョコレート アイス クリーム、クッキーはすべて複数のカテゴリがあるため、複製されます。重複を削除する簡単な方法はありますか? または、カテゴリ最優先で直接商品を注文する方法はありますか?
編集:達成したいことの詳細
私が実際に欲しいのは、左側にすべての製品 (および一意の製品ごとに 1 行のみ) をカテゴリ別に並べた巨大なテーブルです...次のようなものを作成できるようにします。
- カテゴリ - 製品
- フルーツ - バナナ
- 果物 - リンゴ
- フルーツ - キウイ
- デザート - チョコレートアイスクリーム
- デザート - クッキー
- スウィート - チョコレートキャンディー
- スウィート - アップルキャンディー
- ...
見る?フルーツがデザートやスイーツであっても、このテーブルに一度だけ登場してほしい。そして、製品を「最も重要な」カテゴリに表示したいと考えています (そのため、「優先度」について考えました)。
この巨大なテーブルは製品の編集に使用されるため、製品の属性に簡単にアクセスできるようにしたいと考えています (属性ごとに 1 つの列があります)。そのため、データベースへの要求を最小限に抑える必要があります。
私を助けてくれる人に感謝します!クルガル