我有一个Rails应用程序,我正在从ruby 2.1.5和Rails 4.0.x升级到Ruby 2.2.8和Rails 4.2.7。更新后,我发现以下查询不再起作用:
@courses = Course.where(active: true).joins(:course_classes).where(:course_classes => { active: true, class_type: "live"}).includes(:live_class_dates).where('live_class_dates.start_date >= ?', Date.today)
似乎是“包含”方法的问题所在。我尝试用joins替换includes,但这似乎是在忽略或错误地解释了最后一个where子句。
首先,这是Ruby还是Rails问题?其次,关于替换该查询的任何建议?
谢谢。
更新:这是我得到的全部错误:
PG::UndefinedTable: ERROR: missing FROM-clause entry for table "live_class_dates"
LINE 1: ... = $2 AND "course_classes"."class_type" = $3 AND (live_class...
^
: SELECT "courses".* FROM "courses" INNER JOIN "course_classes" ON "course_classes"."course_id" = "courses"."id" WHERE "courses"."active" = $1 AND "course_classes"."active" = $2 AND "course_classes"."class_type" = $3 AND (live_class_dates.start_date >= '2018-06-25') ORDER BY "courses"."title" ASC
答案 0 :(得分:0)
我发现将.references(:live_class_dates)
添加到现有查询中解决了该问题。这是后代的完整查询:
@courses = Course.where(active: true).joins(:course_classes).where(:course_classes => { active: true, class_type: "live"}).includes(:live_class_dates).where('live_class_dates.start_date >= ?', Date.today).references(:live_class_dates)