У меня есть следующая модель:
class Advisor < ActiveRecord::Base
belongs_to :course
end
class Course < ActiveRecord::Base
has_many :advisors
has_many :sessions
has_many :materials, :through=>:sessions
end
class Session < ActiveRecord::Base
belongs_to :course
has_many :materials
end
class Material < ActiveRecord::Base
belongs_to :session
end
Т.е. каждый консультант преподает один курс, у каждого курса есть занятия, и у каждого занятия есть материалы.
Я хочу перейти от советника ко всем связанным материалам, то есть что-то вроде: Advisor.first.materials
Я пытался сделать:
class Advisor < ActiveRecord::Base
belongs_to :course
has_many :sessions, :through=>:course
has_many :materials, :through=>:sessions
end
Но это не сработало, поскольку он рассматривал сессии как таблицу «многие ко многим»: Unknown column 'sessions.advisor_id' in 'where clause': SELECT 'material'.* FROM 'materials' INNER JOIN 'sessions' ON 'materials'.session_id = 'sessions'.id WHERE (('sessions'.advisor_id = 1))
Затем я попытался сделать:
class Advisor < ActiveRecord::Base
belongs_to :course
has_many :materials, :through=>:course
end
В попытке создать ассоциацию используйте ассоциацию «материалы» в модели «Курс», но получили:
ActiveRecord::HasManyThroughSourceAssociationMacroError: Invalid source reflection on macro :has_many :through for has_many :materials, :through=>:sessions. Use :source to specify the source reflection.
Пытался использовать «сессии» в качестве источника, что было хорошей попыткой, но заставило меня получать только сессии, а не материалы.
Есть идеи, если это вообще возможно?
Я использую Rails 2.3.8 (возможно, время для обновления?)
Спасибо!
Amit