我的迁移如下所示:
create table :posts do |t|
t.string :tags, array: true, default: []
end
如何获取所有帖子中存储在标签下的所有唯一标签的数组?
我的迁移如下所示:
create table :posts do |t|
t.string :tags, array: true, default: []
end
如何获取所有帖子中存储在标签下的所有唯一标签的数组?
您可以使用以下方法在数据库中执行此操作:
select distinct unnest(tags) from posts
因此,如果您只想要字符串,则可以使用以下命令直接访问数据库:
tags = Post.connection.select_rows('select distinct unnest(tags) from posts').flatten
如果数组或很多数组之间有很多重叠,tags
那么这应该更快,然后将所有数组从数据库中拉出并在 Ruby 中进行数据整理。
我相信你也可以这样做:
Post.pluck(:tags).flatten.uniq
如果您有大量帖子,这可能会对性能产生相当大的影响...
一旦我发布了这个,我就找到了一个可行的解决方案,尽管可能有一种更优雅的方法来解决这个问题:
Post.select(:tags).map(&:tags).flatten.uniq
我被.map解决的对象数组所抛弃。