Недавно я столкнулся с этой проблемой: Rails 3 link_to (: method = > : delete) не работает
В котором я был смущен, почему мой link_to 'test', test_path(:test => test), :method => :post
не работал (почему это был GETting, а не POSTing). Как видно из вышеприведенного сообщения, это произошло потому, что у меня не было файлов javascript Rails, которые динамически обрабатывают форму "на лету" для :post
, :put
и :delete
.
Я не уверен, что мне особенно нравится полагаться на javascript, чтобы сделать это для меня, так как я хочу, чтобы мое приложение полностью функционировало с отключенным javascript; как мне нравится развиваться (поэтому я знаю, что у меня все функциональные возможности Rails работает правильно), и когда я подключаю свое приложение к javascript, мне не нужно беспокоиться о дублировании этой функции, так как я обычно вытираю файл javascripts запаса, созданный Rails.
Я где-то читал, что технически гиперссылки (элементы привязки) должны использоваться только для запросов GET и что для других методов следует использовать кнопки (как часть элементов формы).
Итак, мои два вопроса:
- Есть ли там драгоценный камень, который будет переписывать любые
link_to ... :method =>
на мой взгляд на элемент формы "на лету", когда мои представления отображаются? - Если нет, как бы я зацепил парсер представления, чтобы написать свой собственный? (используя HAML, предпочтительнее)
По сути, я бы хотел написать это в моем файле HAML:
= link_to 'Test Link', some_path(:with => some_resource), :method => :post
... и мой вывод обработанного HTML выводится следующим образом:
<form action="some_path?with=some_resource" method="post">
<!-- insert appropriate _method hidden field here -->
<!-- add appropriate csrf token and whatnot -->
<button type="submit">Test Link</button>
</form>
... так что все помощники link_to
с определенными методами (таким образом, не будут влиять на простые ссылки, чей глагол GET) будут работать без javascript?
Я также благодарен за любые мысли о том, почему часть этого вопроса, в частности, почему команда Rails решила сохранить эту функциональность привязанной к javascript, а не делать это через чистый HTML?