【发布时间】:2016-03-22 13:49:25
【问题描述】:
我使用带有大量联接的 Active Record 进行了选择。这导致重复值。 select 函数之后是 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 函数。
这是怎么回事?
【问题讨论】:
-
ImmutableRelation表示 ActiveRecord has already fetched the query。试着把你的joins放在最后。 -
您使用的是什么关系型数据库?如果您不使用
.distinct(:id)会看到什么?我怀疑使用.distinct(:id)是问题所在,因为它正在尝试选择已获取的记录。
标签: ruby-on-rails ruby activerecord