2012-06-18 2 views
1

В моем приложении rails пользователь может создавать курсы и школы (группы). Каждый раз, когда пользователь создает курс или школу, их user_id хранится в таблице базы данных для курса или школы, поэтому пользователь has_many: школы и курсы, а также школа или курс принадлежит пользователю:. Кроме того, пользователь может посещать курсы и присоединяться к школам (как к студенту или профессору) с моделью has_many через отношения (школьные группы для школ, которые имеют: user_id, school_id и: role [string], а также для курсов student_users (и Professor_users) который имеет: user_id, course_id и:. ролевую [строка] Мой вопрос, в модели пользователя можно просто указать один раз, что:has_many через приложение Ruby on Rails

has_many :schools, :dependent => :destroy 
has_many :courses, :dependent => :destroy 
has_many :schoolgroups, :dependent => :destroy 
has_many :student_users, :dependent => :destroy 
has_many :professor_users, :dependent => :destroy 

или я должен иметь модель пользователя, которая выглядела так :

has_many :schools, :dependent => :destroy 
has_many :courses, :dependent => :destroy 
has_many :schoolgroups, :dependent => :destroy 
has_many :schools, :through => :schoolgroups 
has_many :student_users, :dependent => :destroy 
has_many :courses, :through => :student_users 
has_many :professor_users, :dependent => :destroy 
has_many :courses, :through => :professor_users 
+0

Вы не можете указать несколько ассоциаций с тем же именем ('курсы'). Не уверен, что это то, что вы здесь здесь? – polarblau

+0

Да, я думаю, что я должен изменить имя полей курса «курс» и «школа» в обеих таблицах отношений, а затем указать внешний ключ –

ответ

1

Вы должны думать о собственности моделей в немного более подробно has_many означает отношение многих к одному, так говорят. Professor has_many Courses означает, что профессор владеет Курсы и курс имеют только одного профессора (или не так?). Так что вы будете делать что-то вроде этого:

has_many :school, :dependent => :destroy 
has_many :courses, :dependent => :destroy 
has_many :schoolgroups, :dependent => :destroy 

С другой стороны, вы будете иметь то, что пользователь связан, но другие пользователи также могут быть связаны таким же образом. Например, пользователь может быть студентом на курсе, но так может и многие другие ученики. Для этого вы будете использовать has_and_belongs_to_many или HABTM, который представляет собой много-ко-многим:

has_and_belongs_to_many :courses_as_student, :class_name => "Course", 
              :join_table => "student_users" 

Тогда в Course классе:

belongs_to :user 

# or even better: 
# belongs_to :professor, :class_name => "User", :foreign_key => "professor_id" 

has_and_belongs_to_many :students, :class_name => "User", 
            :join_table => "student_users" 

Вы можете прочитать все детали в Rails documentation ,

Смежные вопросы