希望有人能解釋這一點。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?
想知道我做這一切都錯了嗎?或任何人都可以解釋?