Rails и путаница REST - PullRequest
       0

Rails и путаница REST

0 голосов
/ 10 октября 2011

Я не уверен, как настроить приложение RESTful rails.У меня есть несколько моделей - Курсы, Студенты, Задания и StudentHandsInAssignment.Между курсами и студентами существует много-много взаимосвязей, между курсами и заданиями один-ко-многим, а между учениками и назначениями в StudentHandsInAssignment два ко многим.

Теперь я думаю о контроллерах и маршрутизации.Из того, что я прочитал, я хочу быть RESTful, что означает создание ресурсов.Тем не менее, я не могу понять, как получить все, что я хочу, в ресурсах, предоставляемых рельсами.

В частности, я хочу иметь детальное представление обо всех оценках для студентов вкурс.Теперь я использую простой маршрут «GET / courses /: id» и соответствующий метод в контроллере или использую что-то более конкретное, например «GET / courses /: id / view_complete_grade_summary».Я думаю, что хотел бы сделать что-то вроде последнего, потому что у меня может быть несколько разных способов просмотра курса.Как справиться с этой ситуацией и настроить этот маршрут / контроллер?

Кроме того, мне понадобится форма для ввода оценок в приложении.Это создаст объекты StudentHandsInAssignment и сохранит их в базе данных.Но когда я использую «GET student_hands_in_assignments / new» для отображения формы (и, в конечном итоге, отправляю вызов «create»), как мне передать идентификатор студента и идентификатор назначения?Должно ли это быть что-то вроде этого:

"GET student_hands_in_assignments / new /: student_id /: assignment_id"

или как это:

"GET student_hands_in_assignments / new /? Student_id =1 & assignment_id = 2 "

Полагаю, я не совсем понимаю, как получить необходимую информацию о студенте и задании в URL RESTful.Каков наилучший способ справиться с этими ситуациями?

Ответы [ 2 ]

1 голос
/ 10 октября 2011

Нет единого «правильного» способа организации ресурсов, ИМО.Моя первая мысль об оценке была бы ориентирована на студента: student /: student_id / course /: course_id / grade, но она могла бы быть так же легко ориентирована на курс, или и то и другое.

У меня не было бы отдельнойоднако страница для ввода оценок, скорее, что-то, свисающее со страницы ученика (список зачисленных курсов с внутристраничной, Ajax-ориентированной записью оценок) и со страницы курса (список учеников с одинаковой схемой ввода оценок)).В противном случае есть переходы приложений, которые просто добавляют когнитивные издержки без какой-либо выгоды.

Для таких вещей, как резюме оценки курса, я бы просто имел / course /: course_id / grade_summary или все, что необходимо.

0 голосов
/ 10 октября 2011

Использование «симпатичных» URL-адресов не является обязательным для приложения RESTful, хотя я считаю, что создание симпатичных URL-адресов помогает мне организовать свои ресурсы, помогает другим поддерживать их работоспособность при сохранении моего кода.с описанными вами сценариями:

# Renders the form to be submitted
/students/:student_id/assignments/:assignment_id  

Добавьте что-то вроде следующего в ваш route.rb:

resources :students do
  resources :assignments
end

, который вызовет:

{controller => 'assignments', :action => 'show'}

спараметры:

{id => ':assignment_id', student_id => ':student_id'}

В качестве дополнительного примечания рассмотрите возможность изменения имени вашей модели StudentHandsInAssignment на другое.Студент, выполняющий задание, не является ни моделью, ни контроллером, это действие над ресурсом.Возможно, имеет больше смысла иметь AssignmentController с действием «hand_in», которое обновляет модель Assignment (предположительно со статусом).

Надеюсь, это поможет.

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