require 'dm-validations'
require 'dm-types'

class Subject
  include DataMapper::Resource

  property :id, Integer, :serial => true
  property :name, String, :nullable => false

  has n, :enrollments
  has n, :students, :through => :enrollments, :class_name => 'Student'
end

class Student
  include DataMapper::Resource

  property :id, Integer, :serial => true
  property :name, String
  property :email, String

  has n, :enrollments
  has n, :subjects, :through => :enrollments, :class_name => 'Subject'

  validates_present :name
  validates_format :email, :as => :email_address
end

class Enrollment
  include DataMapper::Resource

  property :id, Integer, :serial => true
  property :subject_id, Integer, :index => true
  property :student_id, Integer, :index => true

  belongs_to :subject
  belongs_to :student
end

>> subject = Subject.new :name => 'CS101'
=> #
>> subject.save
=> true
>> student = Student.new :name => 'Bill', :email => 'bill@foo.com'
=> #
>> student.save
=> true
>> enrollment = Enrollment.new :subject => subject, :student => student
=> #
>> student.enrollments           <<<<< this causes the problem
=> []
>> enrollment.save
=> true
>> student.enrollments
=> []
>> student.enrollments.all
=> []
>> student2 = Student.first
=> #
>> student
=> #
>> student == student2
=> true
>> student.enrollments
=> []
>> student.enrollments.all
=> []
>> student2.enrollments.all
=> [#]
>>