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 => [#] >>