ActiveRecord distinct不起作用

时间:2016-03-22 13:49:26

标签: ruby-on-rails ruby activerecord

我使用很多联接使用Active Record进行了选择。这导致重复的值。在选择函数之后, distinct 函数的值为:id。但这不起作用!

以下是代码:

def join_query
  <<-SQL
    LEFT JOIN orders on orders.purchase_id = purchases.id
    LEFT JOIN products on products.id = orders.complete_product_id
  SQL
end

def select_query
  <<-SQL
    purchases.*,
    products.reference_code as products_reference_code
  SQL
end

result = Purchase.joins(join_query)
                 .select(select_query)
                 .distinct(:id)

当然, distinct! uniq 功能都不起作用。 distinct!从“ActiveRecord :: ImmutableRelation”返回错误,我不知道是什么意思。

为了解决这个问题,我做了一个黑客攻击,将ActiveRecord_Relation对象转换为数组,并使用了Ruby的 uniq 函数。

这里发生了什么?

1 个答案:

答案 0 :(得分:0)

试试这个:

def select_query
  <<-SQL
    DISTINCT ON (purchases.id) purchases.id,
    products.reference_code as products_reference_code
  SQL
end

add more comma separated column names in select clause

Purchase.select(select_query).joins(join_query)