编辑 - 使用 'includes' 生成一个 SQL 'IN' 子句。使用 Oracle 时,它有 1,000 个项目的限制。它不适用于我的公司。还有其他解决方案吗?
是否可以在关联上急切加载关联?
例如,假设我有一个学院班,一个学院有很多学生。每个学生都属于_to student_level
class Academy < ActiveRecord::Base
has_many :students
end
class Student < ActiveRecord::Base
belongs_to :academy
belongs_to :student_level
end
class StudentLevel < ActiveRecord::Base
has_many :students
end
是否可以在学院中定制关联,以便在加载学生时,我总是将 student_level 与学生一起加载?
换句话说,我希望下面的代码部分产生一个或两个查询,而不是为每个学生生成一个查询:
@academy.students.each do |student|
puts "#{student.name} - #{student.student_level.level_name}"
end
我知道如果我将学生从关联更改为方法,我可以做到这一点,但我不想这样做,因为我无法在其他查询中将学生作为关联引用。我也知道我可以通过以下方式在 SQL 中执行此操作,但我想知道是否有办法在我的关联上不使用 finder_sql 来执行此操作,因为现在我需要在我的默认范围更改时更新我的 finder_sql,这赢了'不预加载关联:
SELECT students.*, student_levels.* FROM students
LEFT JOIN student_levels ON students.student_level_id = student_levels.id
WHERE students.academy_id = ACADEMY_ID_HERE