Rails маршрутизация: как смешать «GET» и «PUT» - PullRequest
0 голосов
/ 26 мая 2010

Не знаю, как сформулировать этот вопрос (я все еще оборачиваюсь вокруг Rails).

Давайте попробуем это:

Скажем, я хотел реализовать превосходную версию Railscast Райана Бейтса на вложенных моделях . (Он показывает, как реализовать опрос, где вы можете добавлять и удалять вопросы и ответы динамически). Я хочу, чтобы это было на стороне пользователя: уметь отвечать на вопросы, а не в учебнике, добавлять комментарии.

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

Я знаю, что не очень хорошо объясняю это. Я надеюсь, вы понимаете, к чему я клоню.

Это просто вопрос настройки правильных маршрутов? Или есть какой-то контроллер mojo, который должен произойти?

Ответы [ 3 ]

1 голос
/ 26 мая 2010

Вам нужен ресурс "вопрос", ресурс "ответ" и ресурс "комментарий". Вам также необходимо реализовать:

  • POST для ответа (который является методом «создания» в контроллере), чтобы ответить на вопрос
  • POST для «комментария» (то есть метода «создать» в контроллере) для создания комментариев
  • PUT для «вопроса» (то есть «обновления» в контроллере) для «выбора» ответов, что эффективно меняет состояние ресурса «вопрос»
1 голос
/ 26 мая 2010

Типичный способ сделать это в Rails использует «ресурсоемкую» маршрутизацию, которая более или менее естественным образом отображает стандартные действия CRUD на методы в вашем контроллере, используя соответствующие HTTP-глаголы.

В файле маршрутов (config / rout.rb) вы устанавливаете нужные ресурсы и действия. Например:

map.resources: questions,: has_many =>: ответы

Установил бы схему маршрутизации для вопроса с несколькими ответами, сопоставляя действия в соответствии с соглашениями Rails:

index: GET /questions/1/answers # list of answers for question id=1
show: GET /questions/1/answers/2 # display answer 2
new: GET /questions/1/answers/new # render form for new answer for question id=1
create: POST /questions/1/answers # create a new answer for question id=1
edit: GET /questions/1/answers/2/edit # render form for answer for question id=1
update: PUT /questions/1/answers/2 # update answer 2
destroy: DELETE /questions/1/answers/2 # delete answer 2

В контроллере вы создаете методы, соответствующие этим стандартным действиям. Вы также можете создавать свои собственные методы и действия для вещей, которые не попадают в парадигму CRUD (например, поиск поля автозаполнения AJAXified)

Надеюсь, что ответит на некоторые ваши вопросы.

0 голосов
/ 26 мая 2010

В ASP.NET MVC есть два метода контроллера с с одинаковым именем , но с разными сигнатурами параметров. Один метод украшен атрибутом, который сообщает ему об обслуживании GET, другой - атрибутом, который сообщает ему об обслуживании POST. Метод GET отображает представление, метод POST обновляет модель.

Я предполагаю, что в Rails он работает аналогичным образом.

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