rails4:model-relationships和indexing for two有很多模型

dgsult0t  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(217)

我的设想如下
这家公司有许多采购是多态关系
用户有许多购买作为多态关系
注意:用户和公司之间没有关系
购买属于您
购买了许多物品
用户购买了很多商品
代码方面

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
nnt7mjpx

nnt7mjpx1#

至于你的第一个问题,我不确定我是否理解你所说的“适当索引”是什么意思,但如果你是说 user.items 我认为最简单的解决方案是在user.rb中创建一个类方法。

def items
  purchases.map(&:items).flatten
end

至于第二种,有几种方法可以让你订购物品。如果您的结果是activerecord集合,那么您可以使用 order 很像你的例子。如果结果是一个数组,我建议使用 sort_by 方法。

def most_recent_items
  self.items.sort_by(&:created_at)
end

请注意,如果这样排序不能按您想要的顺序排列您的项目,您只需添加一个 .reverse 到最后。希望这有帮助!

相关问题