dangerousdave
dangerousdave

Reputation: 6408

How do i solve this 3 model activerecord problem?

class student < ActiveRecord::Base
  has_many :projects

  def has_a_teacher_by_the_name_of(name)
    self.projects.any? { |project| project.teacher.exists?(:name => name) }
  end

end

class project < ActiveRecord::Base
  belongs_to :student
  has_one :teacher
end

class teacher < ActiveRecord::Base
  belongs_to :project
end

This doesn't work because a project might not have a teacher yet, so project.teacher throws an error:

You have a nil object when you didn't expect it! The error occurred while evaluating nil.exists?

Upvotes: 0

Views: 68

Answers (1)

Thomas R. Koll
Thomas R. Koll

Reputation: 3139

You can either add has_many :teachers, :through => :projectsor add a named scope to Project:

class student < ActiveRecord::Base
  has_many :projects

  def has_a_teacher_by_the_name_of(name)
    self.projects.with_teacher.any? { |project| project.teacher.exists?(:name => name) }
  end

end

class project < ActiveRecord::Base
  belongs_to :student
  has_one :teacher
  scope :with_teacher, :conditions => 'teacher_id IS NOT NULL'
end

Upvotes: 2

Related Questions