Как бороться с маршрутами, которые не отвечают на GET в Rails? - PullRequest
0 голосов
/ 03 марта 2012

У меня есть одноэлементный маршрут, который выглядит так:

resource :avatar, :only => [:edit, :update]

Когда пользователь редактирует аватар, он переходит в / avatar / edit для просмотра формы, при сохранении он отправляется с запросом пут в / avatar, а затем перенаправляется обратно в / avatar / edit. Что должно произойти, когда мы получим GET-запрос к / avatar?

В данный момент маршрут не распознан, и возвращается общий 404. Но это происходит намного чаще, чем следовало бы, поэтому я чувствую, что мы должны что-то с этим сделать. Я испытываю желание добавить:

get "/avatar" => redirection("/avatar/edit")

Есть причина не делать этого? какие-либо опасности в этом?

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

  • Там есть ошибка, поэтому вместо перенаправления пользователю просто снова показывают форму редактирования в пут-путе, но затем, вместо повторной отправки, пользователь повторно использует URL-адрес (нажав клавишу ввода в URL-адресе поля, копирование и вставка, закладки и т. д.).

  • Пользователь в этот момент решает изменить локаль (часто это происходит, потому что сообщение об ошибке - это первый раз, когда человеку действительно нужно понять веб-сайт, поэтому он решает переключить язык на тот, который понимает), какой из Курс генерирует get по тому же URL.

У меня теперь простое перенаправление не будет лучшим во втором случае, потому что ошибка потеряна, но, по крайней мере, она лучше, чем 404.

1 Ответ

0 голосов
/ 03 марта 2012

Часть путаницы с этим маршрутом заключается в том, что он множественный и все же относится к одиночному.Есть ли шанс, что вы можете использовать только «аватар»?Если бы я пошел по маршруту "/ аватары", я бы ожидал список аватаров.Если это единственное число, то я ожидаю, что "/ аватар" будет просматривать аватар.Я также думаю, что это может быть полезно для маршрута типа "/avatar.jpg", который отвечает изображением аватара.Однако, если в ваших спецификациях нет смысла использовать шоу и всегда редактировать, попробуйте:

get "/avatars" => "avatars#edit"

или единственное число

get "/avatar" => "avatars#edit"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...