我有一个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')的问题在于它提供了结果中的一个重复项。我不想要任何重复。
答案 0 :(得分:2)
按文字对评论进行分组,并使用having子句进行过滤。
@project.comments.select('text').group('text').having('count(distinct text) = 1')