Что вызывает сбой этого redirect_to? - PullRequest
0 голосов
/ 27 августа 2010

Я пытаюсь использовать это redirect_to

redirect_to :controller => :note_categories, :action => :destroy, :note_id => params[:id]

Это URL, который приводит к

http://localhost:3000/note_categories/272?note_id=272

, и это сообщение об ошибке

Unknown action
No action responded to show. Actions: destroy

Причина, по которой я перенаправляю на действие уничтожения note_categories и передаю идентификатор заметки, заключается в том, что в действии уничтожения я нахожу все примечания_категории, относящиеся к заметке, запускаю некоторый код для них и затем уничтожаю их.Я знаю, что это не очень хороший способ сделать это, но я не мог использовать: зависимый =>: destroy, потому что код, который я должен запустить на note_category, прежде чем удалить его, требует доступа к current_user, что не может произойтив модели note_category.

Так что да, может кто-нибудь сказать мне, что я делаю не так в моем redirect_to?Спасибо за чтение.

1 Ответ

4 голосов
/ 27 августа 2010

Метод redirect_to по сути является реализацией Rails шаблона веб-дизайна Post / Redirect / Get (PRG).Он используется для предотвращения повторных отправок форм, вызванных тем, что пользователь нажимает кнопку «Обновить» браузера после отправки формы.

Типичное использование Rails такое же, как при создании объекта:

  • Формадля создания объекта отображается (new action / HTTP GET)
  • Пользователь заполняет форму
  • Форма отправлена ​​(create action / HTTP POST)
  • Объект создан и сохранен
  • A redirect_to выполняется со статусом HTTP 301/302 для представления show объекта или, возможно, index

- дляредактирование объекта:

  • Отображается форма для редактирования существующего объекта (edit action / HTTP GET)
  • Пользователь заполняет форму
  • Форма отправлена ​​(update действие / HTTP PUT)
  • Объект обновлен и сохранен
  • A redirect_to выполняется со статусом HTTP 301/302 для объекта showпросмотреть или, возможно, index

Вы не можете перенаправить непосредственно на действие destroyпотому что в RESTful Rails он вызывается в результате запроса HTTP DELETE и не отображает шаблон при его вызове.Метод redirect_to всегда перенаправляет на шаблон.

Вы не показали нам код для уничтожения заметок, но я подозреваю, что то, что вы пытаетесь достичь, можно сделать с помощью фильтра before и с помощьюконтроллер передает текущего пользователя методу модели.

...