Ruby on rails - 活动记录查询 - 删除所有重复记录

时间:2014-07-26 11:54:33

标签: ruby-on-rails activerecord ruby-on-rails-4

我有一个Project对象,它有多个注释。

我可以使用@ project.comments轻松获取项目的所有评论

但是,我想过滤掉该项目的所有非唯一评论。

例如,如果有两条评论都说“Hello world。”,我不希望它们中的任何一条出现在我的结果中。

另外,我希望结果数组是注释对象的数组,而不仅仅是注释对象的一个​​属性。

我目前提出以下解决方案

unique_comments_for_project = []
@project.comments.each do |comment|
   if @project.comments.where(:text => comment.text).size < 2
      unique_comments_for_project << comment
   end
end

但是,这个解决方案似乎效率极低。有没有更好的Ruby on Rails方法呢?

N.B。 @ project.comments.select('distinct text')的问题在于它提供了结果中的一个重复项。我不想要任何重复。

1 个答案:

答案 0 :(得分:2)

按文字对评论进行分组,并使用having子句进行过滤。

@project.comments.select('text').group('text').having('count(distinct text) = 1')