首页 > 解决方案 > 如何获得不同的多态关联

问题描述

我试图在没有任何重复的情况下显示多态关系列表。

我有一个 StoreViews 表,其中包含一个名为 viewable 的多态字段(因此我的表中有一个 viewable_id 和 viewable_type 列)。现在我想显示每个多态关系只显示一次的视图,没有重复。

@views = StoreView.
    .distinct(:viewable_id)
    .distinct(:viewable_type)
    .order("created_at DESC")
    .limit(10)

因此,如果 StoreViews 中有两条记录,都具有相同的可视关系,@views 应该只返回最近的一条。然而,这种情况并非如此。

标签: sqlruby-on-railsrubydatabasepostgresql

解决方案


ORDER BYSELECT DISTINCT如果指定,项目必须出现在选择列表中。有几种方法可以解决此问题

在此示例中,使用聚合函数应该可以工作:

@views = StoreView
           .select('DISTINCT viewable_type, viewable_id, MAX(created_at)')
           .group(:viewable_type, :viewable_id)
           .order('MAX(created_at) DESC')
           .limit(10)

推荐阅读