Rails上的错误包括更新至4.2.7之后

时间:2018-06-25 15:26:36

标签: ruby-on-rails ruby activerecord

我有一个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

1 个答案:

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