uniq返回除uniq_by之外的其他结果

时间:2013-10-11 10:41:05

标签: ruby-on-rails ruby

到目前为止,我使用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

我需要改变什么?

3 个答案:

答案 0 :(得分:1)

uniq的ActiveReord-Version似乎忽略了给定的块,只检查对象是否为uniq。如果您查看源代码,您会看到它只是设置了一个标志。

请参阅 http://apidock.com/rails/ActiveRecord/QueryMethods/uniq

您可以将其视为生成的sql语句的修饰符。

答案 1 :(得分:0)

结果是正确的,因为uniq来自Array。要匹配SQL习语的唯一性,您需要使用distinct。

来自documentation

的示例
person.pets.select(:name).distinct
# => [#<Pet name: "Fancy-Fancy">]

尝试:

Projectuser.select(:id, :user_id).distinct

答案 2 :(得分:0)

我用以下方法解决了这个问题:

Projectuser.uniq.pluck(:user_id)