我有一个使用标记和sqlite的rails应用程序我正在尝试部署为学校作业。当我部署到Heroku(它转换为Postgresql)时,我试图运行它时出错。它与SQLITE和POSTGRESQL之间的某些差异有关(从日志看来)
有两个表连接,标签和标记,用于存储与帖子相关的标签。
Rails代码:
self.select("name, count(taggings.tag_id) as count")
.joins(:taggings).group("taggings.tag_id")
这是从控制台捕获的SQLite生成的sql:
Tag Load (0.2ms) SELECT name, count(taggings.tag_id) as count
FROM "tags" INNER JOIN "taggings" ON "taggings"."tag_id" = "tags"."id"
GROUP BY taggings.tag_id
以下是基于在Postgresql下运行的语句的 Heroku日志错误:
2015-06-20T03:25:00.360433+00:00 app[web.1]: **PG::GroupingError**: ERROR: column "tags.name" must appear in the GROUP BY clause or be used in an aggregate function
2015-06-20T03:25:00.360435+00:00 app[web.1]: LINE 1: SELECT name, count(taggings.tag_id) as count FROM "tags" INN...
2015-06-20T03:25:00.360417+00:00 app[web.1]: Tag Load (2.5ms) SELECT name, count(taggings.tag_id) as count FROM "tags" INNER JOIN "taggings" ON "taggings"."tag_id" = "tags"."id" GROUP BY taggings.tag_id
我目前正在尝试寻找解决方案但可以使用一些帮助谢谢!
我正在使用postgres 9.3和rails 4.1
答案 0 :(得分:0)
Postgres要求您在SELECT
子句中显示非GROUP
子句的非汇总字段,因此您选择name
但按taggings.tag_id
分组会感到不满意。请尝试按name
进行分组。
答案 1 :(得分:0)
实际上,在我发布之后,我发现了完全相同的问题和解决方案。错误指向了究竟需要做什么。在语法中的某处包含名称...我只需要一个例子。这是最终的代码。 Tag.select(" tags.id,tags.name,count(taggings.tag_id)as count")。 joins(:taggings).group(" taggings.tag_id,tags.id,tags.name")
答案 2 :(得分:0)
self.select("name, count(taggings.tag_id) as count").joins(:taggings).group("name, taggings.tag_id")
简单