Dziedziczenie relacji po relacji

Cześć.

Mam następujące modele

[code]class SchoolClass < ActiveRecord::Base
has_many :students
end

class Student < User
belongs_to :school_class
belongs_to :teacher
end

class Teacher < User
has_many :students
end[/code]
Czy istnieje jakaś wbudowana metoda która ustawi teacher_id dla @student?

@student = @teacher.school_classes.first.students.build(params[:student]) @student.teacher_id == @teacher.school_classes.first.teacher_id # => true
Wiem, że mogę ustawić before_validation callback, ale może istnieje wbudowane rozwiązanie?

Jeśli dobrze rozumiem Twój problem, to chodzi Ci o relacje przechodnią - nauczycielem studenta jest nauczyciel jego klasy. Wtedy możesz skorzystać z has_many :through.

has_many :through w połowie rozwiązuje mój problem.

Teacher.first.students zwraca studentów biorąc ich z klas, tak jak chciałem ;).

Teraz potrzebuje pomocy w drugą stronę.

Student.first.teacher zwraca nil,a chciałbym, żeby zwracało rekord nauczyciela.

Pytanie co będzie lepszym rozwiązaniem?

  1. metoda dla modelu student

def teacher school_class.teacher end
2) before_validation callback dla modelu student

before_validation :inherit_from_teacher def inheirt_from_teacher self.teacher_id = self.school_class.teacher_id end

ja bym został przy tym opcji pierwszej, natomiast jeśli chodzi o implementację to jest taka fajna metoda delegate

delegate :teacher, :to => :school_class

Dzięki za pomoc.