3

我的迁移如下所示:

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

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

4

3 回答 3

8

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

select distinct unnest(tags) from posts

因此,如果您只想要字符串,则可以使用以下命令直接访问数据库:

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

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

于 2013-08-27T20:18:59.750 回答
2

我相信你也可以这样做:

Post.pluck(:tags).flatten.uniq

如果您有大量帖子,这可能会对性能产生相当大的影响...

于 2013-08-27T19:56:43.020 回答
0

一旦我发布了这个,我就找到了一个可行的解决方案,尽管可能有一种更优雅的方法来解决这个问题:

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

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

于 2013-08-27T19:51:02.377 回答