在Rails 4中使用postgres数组,如何返回数组中所有唯一项的数组?

时间:2013-08-27 19:46:15

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

我的迁移看起来像这样:

create table :posts do |t|
    t.string :tags, array: true, default: []
end

如何在所有帖子中获取存储在标签下的所有唯一标签的数组?

3 个答案:

答案 0 :(得分:6)

您可以使用以下内容在数据库中执行此操作:

select distinct unnest(tags) from posts

因此,如果你只想要字符串,那么你可以直接进入数据库:

tags = Post.connection.select_rows('select distinct unnest(tags) from posts').flatten

如果tags数组或许多数组之间存在很多重叠,那么应该更快,然后将所有数组拉出数据库并在Ruby中进行数据争论。

答案 1 :(得分:2)

我相信你也可以这样做:

Post.pluck(:tags).flatten.uniq

如果你有很多帖子,这可能会对表现造成相当大的影响......

答案 2 :(得分:0)

我发布这个帖子后,我找到了一个有效的解决方案,尽管可能有更优雅的方法来解决这个问题:

Post.select(:tags).map(&:tags).flatten.uniq

我被对象数组所抛弃,由.map解决。