как мое первым приложение Rails, я строй приложения управления домашнего задания, которое имеет следующие таблицы:может ли PORO получить доступ к базе данных?
- пользователей (от аутентификации DEViSE)
- школы
- курсы
- Назначения
В отличие от большинства примеров курсов/оценок приложений, которые я нашел, это никогда не касается всех оценок для всех студентов для определенного курса, но имеет только соотношение 1: много b между студентами и курсами. Поэтому примеры на самом деле не помогают мне.
Чтобы рассчитать текущий класс пользователя в любом данном курсе (который требует доступа к данным как в модели курса, так и в модели назначения), я следую предложению отсюда о переполнении стека и создании PORO в приложении/моделях каталог под названием GradeCalculator.
Но это мой первый опыт создания PORO в приложении Rails, и большая часть документации, которую я нахожу в Интернете, предназначена для более сложных пользователей. Я предполагаю, что он не нужен контроллер (пожалуйста, поправьте меня, если я ошибаюсь), и я вижу, что строить его так же просто, как:
приложения/модель/gradecalculator.rb
Class GradeCalculator
def calculate_current_course_grade(course_id)
@graded_course_assignments = Assignment.where(user_id: current_user.id, course_id: course_id, graded: true)
#grab weights for each type of assignment in @graded_course_assignments from courses table
#do some calculations
#return the array
end
def calculate_user_GPA(current_user.id)
#more of the same
end
end
Мои вопросы:
Может PORO доступ к базе данных (для получения данных из курсов и заданий таблиц). Или мне нужно передать все соответствующие данные из моих других классов (например, присваивания) в качестве параметров при вызове?
1a. Если простой класс может получить доступ к базе данных, отличается ли синтаксис от синтаксиса в моделях? Может ли вышеуказанный код получить доступ к Assignment.where?
1b. Как я могу назвать это ПОРО? Например, как я могу назвать это из своих представлений/присваиваний/index.html.erb?
Может ли он получить доступ к помощнику current_user от Devise?
Тангенциально, я только что понял, что я мог хранения весов назначения в таблице ассигнований. Я думал хронологически (пользователь вводит количество заданий домашней работы, викторины и т. Д. Во время ввода нового курса, который определяет вес для каждого типа назначения), но я мог программно иметь каждое новое задание, заполняющее собственное поле веса, ссылаясь на количество подобных назначений из родительского курса. Это означало бы, что логично, я мог бы выполнить оценку класса прямо в модели Assignment. Но если к курсу были добавлены дополнительные кредиты или другие изменения, все задания могут затем пересчитать их веса. Какой путь правильнее?
Написание этих вопросов заставляет меня подозревать, что я просто передать мой PORO соответствующих данных из моей точки зрения, пусть это делают расчеты по этим данным и возвращает класс. Но я все равно отправлю, на случай, если я ошибаюсь.
Спасибо! Вы подтвердили мои подозрения и выяснили причину их. –