【发布时间】:2012-12-18 08:26:39
【问题描述】:
我有两个模型:
#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 个产品:
- 巧克力冰淇淋,有甜点和甜食类,
- 饼干,有甜点和糖果类,
- 猕猴桃,有糖果、水果和甜点类别
我希望它们像这样订购:
- 猕猴桃(首先是因为水果是最高优先级)
- 巧克力冰淇淋(第二,因为巧克力排在饼干之前,而且它们的类别都具有相同的优先级)
- Cookie
如何在 Rails 中做到这一点? 我不希望我的产品被复制,我知道这样做很容易:
Category.order("priority ASC").each do |cat|
cat.products.order("name ASC").each do |product|
end
end
但在这种情况下,Kiwi、Chocolate Ice Cream 和 Cookies 将被复制,因为它们都有多个类别。 有没有一种简单的方法可以删除重复项?或者有没有办法直接按类别最高优先级订购产品?
编辑:关于我想要实现的目标的更多详细信息
事实上,我想要的是一个巨大的表格,在左侧,我有所有产品(每个唯一产品只有一行)按类别排序......所以我可以有这样的东西:
- 类别 - 产品
- 水果 - 香蕉
- 水果 - 苹果
- 水果 - 猕猴桃
- 甜品 - 巧克力冰淇淋
- 甜点 - 饼干
- 甜 - 巧克力糖
- 甜 - 苹果糖
- ...
看到了吗?即使水果是甜点和甜食,我也希望它在这张表中只出现一次。我希望产品出现在他们的“最重要”类别中(这就是我考虑“优先级”的原因)。
由于这个巨大的表格将用于编辑产品,我希望能够轻松访问产品的属性(每个属性将有一列)。所以我真的需要尽可能减少数据库请求。
感谢任何可以帮助我的人! 库尔加
【问题讨论】:
标签: ruby-on-rails model-associations has-and-belongs-to-many