到目前为止,我使用uniq_by
来计算唯一的项目用户。但是这种方法已被弃用,建议改为使用uniq
。但uniq_by
返回2(正确!),uniq
返回3(不正确)。 projectuser表填充如下:
id,user_id
1,1
2,1
3,2
以下是陈述:
Projectuser.uniq_by {|p| p.user_id}.count --> 2
Projectuser.uniq {|p| p.user_id}.count --> 3
我需要改变什么?
答案 0 :(得分:1)
uniq的ActiveReord-Version似乎忽略了给定的块,只检查对象是否为uniq。如果您查看源代码,您会看到它只是设置了一个标志。
请参阅 http://apidock.com/rails/ActiveRecord/QueryMethods/uniq
您可以将其视为生成的sql语句的修饰符。
答案 1 :(得分:0)
结果是正确的,因为uniq
来自Array。要匹配SQL习语的唯一性,您需要使用distinct。
person.pets.select(:name).distinct
# => [#<Pet name: "Fancy-Fancy">]
尝试:
Projectuser.select(:id, :user_id).distinct
答案 2 :(得分:0)
我用以下方法解决了这个问题:
Projectuser.uniq.pluck(:user_id)