Rails 切换到 PostgreSQL 时活动记录查询中断
Rails Active Record Query Breaking When Switching To PostgreSQL
大家好我收到这个错误:
column "article_tags.id" must appear in the GROUP BY clause or be used in an aggregate function
当我使用此查询切换到 PostgreSQL 时:
@article_tags = ArticleTag.includes(:tag, :article).where(is_deleted: [nil, false]).where('tags.is_deleted' => [nil, false], 'articles.is_deleted' => [nil, false], 'articles.category_id' => @category.id).group('tags.slug').order('tags.articles_count DESC')
我尝试通过仅选择相关记录来修复它,如下所示:
@article_tags = ArticleTag.includes(:tag, :article).where(is_deleted: [nil, false]).where('tags.is_deleted' => [nil, false], 'articles.is_deleted' => [nil, false], 'articles.category_id' => @category.id).select("tags.*").group('tags.slug').order('tags.articles_count DESC')
但是忽略特定的 SELECT。
使用 MySQL 时从未中断。有人可以告诉我我做错了什么吗?
所以我相信我已经以合适的方式解决了我的问题。基本上我摆脱了包含和组。我改为使用连接并选择不同的列。如果其他人遇到这些问题,下面是我的最终查询:
@article_tags = ArticleTag.select("DISTINCT (tags.slug), tags.articles_count").joins(:tag, :article).where(is_deleted: [nil, false]).where('tags.is_deleted' => [nil, false], 'articles.is_deleted' => [nil, false], 'articles.category_id' => @category.id).order('tags.articles_count DESC')
大家好我收到这个错误:
column "article_tags.id" must appear in the GROUP BY clause or be used in an aggregate function
当我使用此查询切换到 PostgreSQL 时:
@article_tags = ArticleTag.includes(:tag, :article).where(is_deleted: [nil, false]).where('tags.is_deleted' => [nil, false], 'articles.is_deleted' => [nil, false], 'articles.category_id' => @category.id).group('tags.slug').order('tags.articles_count DESC')
我尝试通过仅选择相关记录来修复它,如下所示:
@article_tags = ArticleTag.includes(:tag, :article).where(is_deleted: [nil, false]).where('tags.is_deleted' => [nil, false], 'articles.is_deleted' => [nil, false], 'articles.category_id' => @category.id).select("tags.*").group('tags.slug').order('tags.articles_count DESC')
但是忽略特定的 SELECT。
使用 MySQL 时从未中断。有人可以告诉我我做错了什么吗?
所以我相信我已经以合适的方式解决了我的问题。基本上我摆脱了包含和组。我改为使用连接并选择不同的列。如果其他人遇到这些问题,下面是我的最终查询:
@article_tags = ArticleTag.select("DISTINCT (tags.slug), tags.articles_count").joins(:tag, :article).where(is_deleted: [nil, false]).where('tags.is_deleted' => [nil, false], 'articles.is_deleted' => [nil, false], 'articles.category_id' => @category.id).order('tags.articles_count DESC')