2010-05-26 3 views
0

Не уверен, как задать этот вопрос (я все еще обнимаю Rails).Rails routing: как смешивать «GET» и «PUT»

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

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

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

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

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

ответ

1

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

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

map.resources: вопросы,: 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

Я предполагаю, что меня смущает (и это касается ответа Zepplock), - это установить параллельную серию контроллеров и представлений для пользовательской части Пример опроса Райана, и если да, разве это не побеждает парадигму DRY? Мне по существу нужна версия приложения, доступная только для чтения, где я могу просматривать и взаимодействовать с опросом, но только для ответа на вопросы и добавления комментариев. Я не могу обдумать это. – thermans

+1

Если взгляды в остальном не совпадают, и единственное отличие состоит в том, чтобы показать определенные элементы в зависимости от роли зрителя, вам, вероятно, лучше всего использовать один контроллер и просмотр и обернуть «частные» разделы с помощью 'if 'заявление. – zetetic

-6

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

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

1

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

  • POST для «ответ (который является„создать“метод в контроллере), чтобы ответить на этот вопрос
  • POST для„комментарий“(который является„создать“метод в контроллере) для создания комментарии
  • PUT на «вопрос» (который «обновление» в контроллере), чтобы «забрать» ответы, которые эффективно изменяя состояние «вопрос» ресурс
+0

ОК, получил это. Благодарю. Как мне получить доступ к ним в представлениях? – thermans

+0

Мне просто интересно: возможно ли получить маршруты POST/PUT/GET/DELETE, если вы используете встроенные методы CRUD в контроллере? – Robbie

+0

@thermans: представления будут иметь соответствующие имена: например, «create.html.erb». Их можно найти в папке «views». Я бы предложил посмотреть поколение «эшафот», которое будет генерировать модель/просмотр/контроллер для вас со всеми операциями CRUD (включая маршруты) @ Robbie: вы можете настроить маршрут для включения/выключения POST/PUT/GET/DELETE на ресурс , а также добавить новые пути (методы) к существующим маршрутам – Zepplock