Вот некоторый контекст: я использую Rails 5.1.4, Ruby 2.6.1 и GraphQL 1.9.Мой Rails-проект в настоящее время сконфигурирован как проект REST API только.Однако я начинаю конвертировать его в использование GraphQL.После запуска связанных с графиком генераторов у меня в настоящее время есть файл graphql_controller.rb
и файл query_type.rb
.
Для моей модели базы данных у меня есть модель SchoolCourse
, которая описывает конкретный курс, преподаваемый в колледже.Для этой модели я определил school_course_type.rb
.В моем файле query_type.rb
я определил поле для запроса schoolCourse
.
Однако есть два типа пользователей, которые могут войти в мое приложение - учителя и студенты.Если пользователь является учителем, то при доступе к приложению и запросе schoolCourse
будут возвращены все школьные курсы, которые преподает этот конкретный инструктор.Если пользователь является студентом, то при доступе к приложению и запросе schoolCourse
будут возвращены все школьные курсы, которые посещает данный конкретный студент.В обоих случаях данные schoolCourse
имеют один и тот же тип (school_course_type
).
В настоящее время у меня есть запрос schoolCourse
, определенный в query_type.rb
для работы с учителями.Однако, если я хочу расширить запрос schoolCourse
, чтобы он работал и для студентов, похоже, что мне придется обновить запрос schoolCourse
, чтобы включить логику if / else
, чтобы она выглядела примерно так:
# This is how it currently looks like:
def schoolCourses
teacher_user = context[:current_user]
teacher_user.school_courses
end
# This is how I think it would change:
def schoolCourses
user = context[:current_user]
if user.type == 'teacher'
user.school_courses
else
# different way for students to retrieve school courses
end
end
Хотя это может сработать, это не идеально. Основная проблема, которую я хочу решить, - это определить несколько schoolCourse
запросов и сделать так, чтобы учителя использовали одну версию, а учащиеся использовали другую версию.
В моем текущем приложении яу меня есть 2 schoolCourse
контроллеров - один для учителей и один для студентов, и если разбить его на два файла, мой API станет намного чище. Есть ли способ сделать что-то похожее с файлом query_type.rb
, где у меня есть тип запроса для учителей и другой для студентов? Как вы решали эту проблему в своих проектах?
Добавление дополнительного контекста - 20.09.2009 14:10 PST
Как школьные курсы различаются между учеником и учителем? Итак, объекты школьного курсаодинаковы для студентов и преподавателей.В настоящее время в моем RESTful бэкэнде у меня есть 2 отдельных файла контроллера для получения курсов для студентов.Один для учителей, а другой для студентов.Когда вызывается диспетчер школьных курсов учителя, он возвращает школьные курсы только зарегистрированному учителю.Аналогичным образом, когда вызывается диспетчер школьного курса ученика, он возвращает школьные курсы только зарегистрированному ученику.
Можете ли вы объяснить, почему вы хотите иметь несколько школьных курсов?запросы? Причина, по которой я думаю, что мне нужно несколько запросов школьного курса, заключается в том, что я не хочу добавлять if / else
логику в запрос одного школьного курса, чтобы сделать что-то для учителей и что-то еще для учащихся.Я знаю, что это сработает, но у меня, вероятно, есть 50 других моделей, и мне не нужно помещать в каждый запрос один и тот же тип логики if / else
.