Хотя на первый взгляд кажется, что студенты должны принадлежать непосредственно к классу, класс на самом деле не является истинной заменой "has_and_belongs_to_many". Для этого я бы использовал «зачисление». (Обратите внимание, что с помощью rails 3.1 теперь вы можете делать вложенные: через вызовы.)
Вот немного более продвинутая реализация, чем у предыдущего комментатора:
class School << ActiveRecord::Base
has_many :academic_classes
has_many :enrollments, :through => :academic_classes
has_many :students, :through => :enrollments, :uniq => true
end
class AcademicClass << ActiveRecord::Base
belongs_to :school
has_many :enrollments
end
class Enrollment << ActiveRecord::Base
belongs_to :academic_class
belongs_to :student
end
class Student << ActiveRecord::Base
has_many :enrollments
has_many :academic_classes, :through => :enrollments
has_many :schools, :through => :academic_classes, :uniq => true
end