我的迁移看起来像这样:
create table :posts do |t|
t.string :tags, array: true, default: []
end
如何在所有帖子中获取存储在标签下的所有唯一标签的数组?
答案 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解决。