HTTP GET превращается в метод POST
Я использую Ruby on Rails для создания своего приложения и использую THIN сервер на heroku.
В настоящее время используется Rails 3.2.8
Я столкнулся с этим странным поведением, которое я не понимаю.
Ссылка была создана с помощью помощника link_to в навигационной панели. Я хочу явно использовать метод HTTP GET, чтобы мой код ruby был написан так:
<%=link_to "FAQ",help_path,:method=> :get %>
В результате HTML выглядит так:
<a data-method="get" href="/en/help">FAQ</a>
Если я запускаю рейк-маршруты, help_path выглядит так:
help (/:locale)/help(.:format) static_pages#Help {:locale=>/en}
Однако, когда я смотрю на то, что происходит с URL-адресом в Firebug (используя вкладку Net), похоже, что вместо метода GET использовался POST. Так что вместо того, чтобы видеть:
GET help
это было замечено вместо этого:
POST help
Если я уберу явный вызов метода get следующим образом:
<%=link_to "FAQ",help_path %>
что приводит к этому:
<a href="/en/help">FAQ</a>
Тогда в firebug -> Net я даже не увижу этот URL: GET help
Под столбцом URL будет показано следующее:
? undefined
Когда URL-адрес не определен, приложение Rails на heroku будет пытаться загрузить каждый файл ресурсов по отдельности, а не загружать предварительно скомпилированный файл ресурсов манифеста.
Кто-нибудь сталкивался с такой ситуацией? Я не могу точно понять, где в магическом черном ящике Rails, герою или тонком сервере может измениться метод get и post.
Любые предложения с благодарностью!
1 ответ
Я начну говорить, что не вижу причины, по которой нужно создать link_to и явно указать:get как метод:. В любом случае, это поведение по умолчанию.
На ваш вопрос: Вы видите запрос POST, потому что, когда вы используете опцию: method для link_to, он генерирует форму, которая отправляет на желаемый URL-адрес и скрытый ввод _method с желаемым типом запроса (POST/PUT/DELETE/GET). Rails знает, как обрабатывать запросы POST, которые содержат параметр _method, и отвечает правильным маршрутом. В вашем случае - маршрут, который соответствует действию GET.
Вы можете прочитать больше на link_to здесь.
РЕДАКТИРОВАТЬ:
Я прочитал документацию более тщательно, и похоже, что опция: method не поддерживает:get как значение.