Судя по ветке комментариев, кажется, что использование модели Instructor
не нужно.
Поскольку в своей политике вы уже ограничили действие create
значением user
с ролью Instructor
и никогда не ожидаете, что Instructor
будет иметь атрибуты, превышающие user_id
, тогда я думаю, что просто сделай:
def create
...
authorize @course
@course.instructor = current_user
...
end
Теперь я держу пари, что Course
имеет instructor_id
, а не user_id
. Но это нормально. Вам просто нужно сделать:
class Course << ApplicationRecord
belongs_to :instructor, class_name: 'User' # or whatever your user class name is.
...
end
А теперь вы сможете сделать:
@course.instructor
и верните User
, который является инструктором курса.
Я также держу пари, что Instructor has_many :courses
, что обычно позволяет вам сделать что-то вроде:
@instructor.courses
Итак, вам нужно что-то вроде:
class User << ApplicationRecord
has_many :instructed_courses, class_name: 'Course', foreign_key: :instructor_id
...
end
И теперь вы сможете делать такие вещи, как:
@user.instructed_courses
current_user.instructed_courses
Я делаю "Instructed_courses", потому что, предположительно, User
с ролью Student
захочет сделать что-то вроде:
@user.enrolled_courses
Чтобы осуществить это, я думаю, я бы создал:
class StudentCourse < Application
belongs_to :enrolled_course, class_name: 'Course'
belongs_to :student, class_name: 'User'
end
А потом:
class User << ApplicationRecord
has_many :instructed_courses, class_name: 'Course', foreign_key: :instructor_id
has_many :student_courses, foreign_key: :student_id
has_many :enrolled_courses, through: :student_courses
...
end
А теперь вы должны уметь:
@user.enrolled_courses
current_user.enrolled_courses
Вы, вероятно, также захотите сделать что-то вроде:
class Course << ApplicationRecord
belongs_to :instructor, class_name: 'User' # or whatever your user class name is.
has_many :student_courses, foreign_key: :enrolled_course_id
has_many :students, through: :student_courses
...
end
Так что вы можете сделать:
@course.students
Shazam!