Запрос значений из нескольких моделей - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть модели Course и Lesson.Курс имеет несколько уроков.Я хочу найти все уроки для текущего зарегистрированного студента, чтобы создать вид расписания.

У меня есть метод, который возвращает все курсы, которые изучает этот студент.Теперь я хочу получить все уроки из всех этих курсов в @courses в @lessons, что-то вроде:

def index
    @courses = current_student.find_courses
    @lessons = @courses.lessons
end

Возможно ли сделать это как-то просто в одной строке?

Метод find_courses реализован следующим образом:

def find_courses
    Course.where("id IN (?)", StudentAssignment.select("course_id").where('student_id == (?)', self.id))
  end

Модели:

class Student < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable

  has_many :student_assignments
  has_many :courses, :through => :student_assignments
  ....

class Lesson < ApplicationRecord
      belongs_to :room
      belongs_to :teacher
      belongs_to :course
      ....

class Course < ApplicationRecord
  has_many :lessons, dependent: :destroy
  has_many :teacher_assignments
  has_many :teachers, :through => :teacher_assignments
  has_many :student_assignments
  has_many :students, :through => :student_assignments
  ...

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018
class Student < ApplicationRecord
  has_many :courses

  def active_lessions
    Lession.joins(course: :students).where(students: {id: self.id})
  end
end

Таким образом, вы можете напрямую получить все активные скидки для current_user

current_student.active_lessions
0 голосов
/ 13 декабря 2018

Попробуйте:

@lessons = @courses.flat_map(&:lessons)

Каждый курс заносится в список @courses и получает список уроков для этого курса.

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