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 に答える