我的设想如下
这家公司有许多采购是多态关系
用户有许多购买作为多态关系
注意:用户和公司之间没有关系
购买属于您
购买了许多物品
用户购买了很多商品
代码方面
class User
has_many :purchases, as: :purchasable, dependent: :destroy
has_many :items, through: :purchases
end
class Purchase
belongs_to :purchasable, polymorphic: true
has_many :items, dependent: :destroy
end
class Item
belongs_to :purchase
end
问题1:什么是合适的索引 User.first.items
?
问题2:我想找到最近购买的物品,按物品类别对它们进行分组。最有效的索引/arel/sql是什么?目前,我确信这是低效的,代码如下
class User
def most_recent_items
item_ids = Item.select("MAX(id) AS id").group(:category, :puchase_id).collect(&:id) & items.collect(&:id)
Item.order("created_at DESC").where(:id => item_ids)
end
end
1条答案
按热度按时间nnt7mjpx1#
至于你的第一个问题,我不确定我是否理解你所说的“适当索引”是什么意思,但如果你是说
user.items
我认为最简单的解决方案是在user.rb中创建一个类方法。至于第二种,有几种方法可以让你订购物品。如果您的结果是activerecord集合,那么您可以使用
order
很像你的例子。如果结果是一个数组,我建议使用sort_by
方法。请注意,如果这样排序不能按您想要的顺序排列您的项目,您只需添加一个
.reverse
到最后。希望这有帮助!