Как настроить ассоциации моделей в Rails

Я пытаюсь создать ассоциации для трех моделей в моем приложении Rails. В приложении Пользователь может получить доступ к курсам, в которых есть видео. Как бы я смоделировал это?

Вот что у меня сейчас есть:

class User < ApplicationRecord
 has_many :courses
 has_many :videos, through: :courses
end

class Course < ApplicationRecord
 belongs_to :user
 has_many :videos
end

class Video < ApplicationRecord
 belongs_to :course
 belongs_to :user
end

Это правильный способ смоделировать эти ассоциации для того, что я хочу, чтобы приложение могло достичь?


person Treana    schedule 11.03.2019    source источник
comment
Может ли video использоваться более чем в одном course? Кроме того, у вас belongs_to :user в Video. Этот пользователь является создателем Video? Или это какой-нибудь User, имеющий доступ к Video через Course?   -  person jvillian    schedule 12.03.2019
comment
@jvillian Да, на каждом курсе есть несколько видеороликов. По сути, курсы - это видеокурсы. Пользователь не создает видео, только получает доступ к нему через курс.   -  person Treana    schedule 12.03.2019
comment
Да, но (как я спросил) можно ли Video использовать во многих Courses? Прямо сейчас ваш Video может принадлежать только одному Course.   -  person jvillian    schedule 12.03.2019
comment
Вы спрашиваете, можно ли использовать одно и то же видео во многих курсах? Если это ваш вопрос, то нет. У каждого курса есть отдельные видео.   -  person Treana    schedule 12.03.2019
comment
@jvillian Как бы я смоделировал его, чтобы с каждым курсом было связано много видео?   -  person Treana    schedule 12.03.2019


Ответы (1)


Обычно это выглядит примерно так:

class UserCourse < ApplicationRecord
  belongs_to :user 
  belongs_to :course 
end

class User < ApplicationRecord
  has_many :user_courses
  has_many :courses, through: :user_courses
  has_many :videos, through: :courses
end

class Course < ApplicationRecord
  has_many :user_courses
  has_many :users, through: :user_courses
  has_many :videos
end

class Video < ApplicationRecord
  belongs_to :course
  has_many :users, through: :course
end

Это должно позволить вам:

@user.courses
@user.videos
@course.users
@course.videos
@video.course
@video.users

(Предполагая, конечно, что вы создали каждую из указанных выше переменных и у вас есть связанные записи.)

person jvillian    schedule 12.03.2019