我正在尝试将 rails 3.0 应用程序升级到 rails 4.0。我注意到的行为之一是模型之间的关系停止工作。
假设我们有以下模型:
class Student < ActiveRecord::Base
has_many :teacher_students
has_many :teachers, :through => :teacher_students, :select => 'teacher_students.met_with_parent, teachers.*'
# The Rails 4 syntax
has_many :teachers, -> { select('teacher_students.met_with_parent, teachers.*') }, :through => :teacher_students
end
class Teacher < ActiveRecord::Base
has_many :teacher_students
has_many :students, :through => :teacher_students, :select => 'teacher_students.met_with_parent, students.*'
end
class TeacherStudent < ActiveRecord::Base
belongs_to :teacher
belongs_to :student
# Boolean column called 'met_with_parent'
end
现在我们可以做到:
teacher = Teacher.first
students = teacher.students
students.each do |student|
student.met_with_parent # Accessing this column which is part of the join table
end
这适用于 Rails 3.0,但现在在 Rails 4.0 上,Unknown column 'met_with_parent' in 'field list'
我相信 Rails 4 正在努力变得聪明,而不是加载整个给定的连接表。