我使用很多联接使用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 函数。
这里发生了什么?
答案 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)