ActiveRecord отношения между HAVE и IS - PullRequest
1 голос
/ 24 января 2012

Итак, в моей настройке Ruby on Rails есть следующие модели: пользователи и курсы

курсы должны иметь content_managers , а эти content_managers состоят из нескольких человек в модели users .

Я новичок, так что терпите меня. Я думал о создании новой модели под названием content_managers, у которой есть user_id и course_id, который связывает две таблицы. Для меня имеет смысл, что у курсов есть Content_managers. Однако, исходя из модели пользователей, не имеет смысла, что пользователи имеют Content_managers. Некоторые из них являются довольными менеджерами.

С этой точки зрения, я считаю, что я думаю об этом неправильно, и мне нужно настроить мой ActiveRecord иначе, чем я предполагаю. Любая помощь приветствуется.

Спасибо!

1 Ответ

0 голосов
/ 24 января 2012

В 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 раз превышать ожидаемый уровень использования, чтобы знать, где находится потолок.Некоторые структуры очень хорошо работают только при тривиальных размерах наборов данных, но плавятся при воздействии реальных условий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...