В ActiveRecord нет «есть» или «есть», есть только «has_many», «has_one» и «own_to».С помощью этих инструментов вы сможете делать то, что хотите.
Пример:
class Course < ActiveRecord::Base
has_many :content_managers
end
class ContentManager < ActiveRecord::Base
has_many :content_manager_members
has_many :users,
:through => :content_manager_members,
:source => :user
end
class ContentManagerMember < ActiveRecord::Base
belongs_to :course_manager
belongs_to :user
end
class User < ActiveRecord::Base
has_many :content_manager_members
has_many :content_managers,
:through => :content_manager_members
end
Обязательно правильно их индексируйте, и все будет в порядке, хотя переход от пользователя к курсу будетбудь медленнымВозможно, вам придется кэшировать некоторые из них, чтобы найти необходимый уровень производительности, но это отдельная проблема, которая будет раскрыта во время тестирования.
При реализации чего-либо подобного обязательно загрузите его сдостаточный объем тестовых данных, который будет примерно в 10 раз превышать ожидаемый уровень использования, чтобы знать, где находится потолок.Некоторые структуры очень хорошо работают только при тривиальных размерах наборов данных, но плавятся при воздействии реальных условий.