【发布时间】:2016-03-10 15:33:14
【问题描述】:
当我使用 Chartkick 将一些图表安装到我的 ruby on rails 项目中时,我遇到了一个奇怪的错误,我无法解决或理解其他解释。
我将以下代码嵌入到我的视图文件中。
<%= area_chart @bets_by_month.group_by_day(:date_of_bet).sum(:profit_or_loss) %>
@bets_by_month 实例是这样在控制器中声明的
@bets_by_year = Bet.where("EXTRACT(YEAR FROM date_of_bet) = ?", params[:year])
@bets_by_month = @bets_by_year.where("EXTRACT(MONTH FROM date_of_bet) = ?", params[:month])
@bets_by_month = @bets_by_month.order("date_of_bet DESC")
当我尝试加载页面时返回错误。
PG::GroupingError: ERROR: column "bets.date_of_bet" must appear in the GROUP BY clause or be used in an aggregate function
但是,当我将此代码嵌入到我的视图文件中时,我没有遇到任何问题。
<%= area_chart Bet.group_by_day(:date_of_bet).sum(:profit_or_loss) %>
我需要使用该实例的原因是因为我希望每个月都有一个不同的图表来显示该月的结果。
【问题讨论】:
-
能否贴出运行图表代码时命中数据库的生成SQL?
-
这是您要找的吗?
Bet Load (0.3ms) SELECT "bets".* FROM "bets" (0.4ms) SELECT SUM("bets"."profit_or_loss") AS sum_profit_or_loss, (DATE_TRUNC('day', (date_of_bet::timestamptz - INTERVAL '0 hour') AT TIME ZONE 'Etc/UTC') + INTERVAL '0 hour') AT TIME ZONE 'Etc/UTC' AS day FROM "bets" WHERE (date_of_bet IS NOT NULL) GROUP BY (DATE_TRUNC('day', (date_of_bet::timestamptz - INTERVAL '0 hour') AT TIME ZONE 'Etc/UTC') + INTERVAL '0 hour') AT TIME ZONE 'Etc/UTC'
标签: ruby-on-rails ruby postgresql