rails SQLITE代码中断转换为Heroku Postgresql

时间:2015-06-20 14:34:09

标签: ruby-on-rails postgresql heroku

我有一个使用标记和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

3 个答案:

答案 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")

简单