Я недавно столкнулся с этой проблемой: Rails 3 link_to (: method =>: delete) не работает
В котором я был смущен, почему мой link_to 'test', test_path(:test => test), :method => :post
не работал (почему он получал, а не 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?