希望有人能解释这一点。Active Record .includes和where where where子句中的查询需要表名?
我
class Student < ActiveRecord::Base
has_many :course_bookings, autosave: true, dependent: :destroy
class CourseBooking < ActiveRecord::Base
belongs_to :course_plan
class CoursePlan < ActiveRecord::Base
has_many :course_bookings, :dependent => :destroy
我试图做的查询是
对于给定的学生,发现我所有的course_bookings,他们的course_plan码等于“ENG”
而且我想急切地加载course_booking.course_plan eg
s = Student.first
s.course_bookings.includes(:course_plan).where(course_plans:{code:'ENG'}).references(:course_plans).size
结果1
其中作为
s.course_bookings.includes(:course_plan).where(course_plan:{code:'ENG'}).references(:course_plans).size
即除去在.where(course_plan:{code:'ENG'})
在
PG :: UndefinedTable
结果S:错误:缺少表“course_plan”的FROM子句条目
我不明白为什么我需要在where子句中使用s。
我知道产生的SQL是
LEFT OUTER JOIN "course_plans" ON "course_plans"."id" = "course_bookings"."course_plan_id" WHERE "course_bookings"."student_id" = $1 AND "course_plans"."code" = 'ENG'"
VS
LEFT OUTER JOIN "course_plans" ON "course_plans"."id" = "course_bookings"."course_plan_id" WHERE "course_bookings"."student_id" = $1 AND "course_plan"."code" = 'ENG'"
即差"course_plan"."code" = 'ENG'"
VS "course_plans"."code" = 'ENG'"
我还以为活动记录足够的智慧去实现我belongs_to的assoication被称为course_plan?
想知道我做这一切都错了吗?或任何人都可以解释?