I personally would recommend the following approach using areas:
class Student < ActiveRecord::Base has_many :teacher_students has_many :teachers, :through => :teacher_students end class Teacher < ActiveRecord::Base has_many :teacher_students has_many :students, :through => :teacher_students scope :met_with_parent, -> { joins(:teacher_students).where('teacher_students.met_with_student = ?', true) } end class TeacherStudent < ActiveRecord::Base belongs_to :teacher belongs_to :student end
Then you can do the following:
Teacher.first.students.met_with_parent
This allows you to maintain relationships AND filter when necessary.
source share