Что вызывает сбой этого 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 и с помощью контроллера, передающего текущего пользователя методу модели.