0

部署到heroku(运行PG)后出现以下错误,尽管它在本地运行良好(运行sqlite3)

ActionView::Template::Error (PGError: ERROR:  column "calendar_day" does not exist
LINE 1: ...ated_at > '2012-04-09 19:39:54.787077') AND (date(calendar_d...
                                                         ^
SELECT  date(created_at) as calendar_day, count(*) as total_checkins FROM "checkins"  WHERE (user_id = 1 AND group_id = 1 AND created_at > '2012-04-09 19:39:54.787077') AND (date(calendar_day) = '2012-05-07') GROUP BY date(created_at) LIMIT 1):
...
app/helpers/groups_helper.rb:32:in `checkin_day'

请注意,“calendar_day”不是持久表上的实际列,而是我使用 AS 语句动态定义的列(不确定这在技术上叫什么)。相关的辅助函数如下所示。基本上,在页面顶部我调用了 calendar_view,稍后我将结果作为 checkins 参数传递给 checkin_day。正是在这个 checkin_day 调用中,我遇到了错误。知道为什么这在本地运行良好但在 heroku 中运行良好吗?

def calendar_view(member, timeperiod)
  Checkin.select("date(created_at) as calendar_day, count(*) as total_checkins").where("user_id = ? AND group_id = ? AND created_at > ?", member.member.id, member.group.id, Time.now - timeperiod.days).group("date(created_at)")
end

def checkin_day(checkins, day)
  ch = checkins.where("date(calendar_day) = ?", day).first
  return ch.total_checkins if ch
  return 0
end
4

1 回答 1

2

您在查询(投影)的 SELECT 部分定义的内容在评估 WHERE 子句(选择)期间不可用。您必须在那里再次定义它:

def checkin_day(checkins, day)
  ch = checkins.where("date(created_at) = ?", day).first
  return ch.total_checkins if ch
  return 0
end
于 2012-05-07T20:22:24.803 回答