希望有人能解释一下。
我有
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_plan代码等于&#34; ENG&#34;
另外,我想加载course_booking.course_plan e.g。
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:错误:缺少表格#34; course_plan&#34;
的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'"
我会认为Active Record足够智能,以实现我的belongs_to配置称为course_plan?
想知道我做错了吗?还是有人可以解释一下吗?
答案 0 :(得分:0)
where()范围内的代码更接近sql而不是activerecord。你也可以直接把它写成sql:
where("course_plans.code = 'ENG'")
course_plans:将hash范围中的哈希值作为表的名称,而不是belongs_to关联的名称;因此PG错误 - 没有名为&#39; course_plan&#39;。
的表格