让我们假设我有一个型号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 2009-07-20 19:43:13