Что вызывает сбой этого redirect_to?

Я пытаюсь использовать это 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 ответ

Решение

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

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

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

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

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

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

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

Другие вопросы по тегам