Как проверить, все ли уроки были просмотрены? - PullRequest
0 голосов
/ 29 мая 2019

Я хочу определить метод (complete), который возвращает true, если пользователь просмотрел все уроки курса. Прямо сейчас метод возвращает только ложь, даже если просмотрены все уроки.

Модель пользователя:

has_many :enrolments, dependent: :destroy
has_many :courses, through: :enrolments
has_many :views
has_many :lessons, through: :views

def enrol(course)
  courses << course
end

def enrolled?(course)
  courses.include?(course)
end

def view(lesson)
  lessons << lesson
end

def viewed?(lesson)
  lessons.include?(lesson)
end

def complete(course)
  if self.viewed?(course.lessons.all)
    return true
  else
    return false
  end
end

Модель урока:

belongs_to :course
has_one_attached :file
default_scope -> { order(created_at: :desc) }
has_many :views
has_many :users, through: :views

Модель курса:

belongs_to :company
has_many :lessons, dependent: :destroy
default_scope -> { order(created_at: :desc) }
has_many :enrolments, dependent: :destroy
has_many :users, through: :enrolments

Просмотр модели:

belongs_to :user
belongs_to :lesson

1 Ответ

0 голосов
/ 29 мая 2019

Ваш viewed? проверяет только один урок, но вы передаете связь там.

Для этого случая достаточно сравнить массивы с идентификаторами уроков:

def complete(course)
  lessons.where(course: course).ids.sort == course.lessons.ids.sort
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...