как установить метод, помещенный в form_tag в рельсах?

как установить метод внутри формы, чтобы поместить form_tag в rails?, у меня есть form_tag следующим образом:

<%= form_tag(url, :method => :put, :multipart => true, :class =>"form-horizontal") do %>
 ......
<% end %>

но если я проверю элемент, форма не имеет метода «поместить», но все же «отправить»?

<form accept-charset="UTF-8" action="/admin/stores/1/information/social_update" class="form-horizontal" enctype="multipart/form-data" method="post">
 ....
</form>

Почему???


person tardjo    schedule 10.01.2014    source источник
comment
stackoverflow.com/questions/165779/   -  person Marcelo De Polli    schedule 11.01.2014
comment
В чем тут, собственно, неразбериха?   -  person zeantsoi    schedule 11.01.2014


Ответы (3)


Согласно документам:

Если используется «исправить», «поставить», «удалить» или другой глагол, добавляется скрытый ввод с именем _method для имитации глагола над публикацией.

Поэтому следующий код выведет следующую разметку:

form_tag('/posts/1', method: :put)
#=> <form action="/posts/1" method="post"> ... <input name="_method" type="hidden" value="put" /> ...

По сути, это обратно совместимый способ реализации протокола PUT в разных браузерах. Хотя метод отправки формы — POST, из-за скрытого ввода формы Rails понимает, что желаемый метод отправки — PUT.

person zeantsoi    schedule 10.01.2014
comment
Вы действительно читали хоть один мой ответ? По умолчанию Rails добавляет скрытый ввод, указывающий, что метод должен быть отправкой PUT. Таким образом, хотя атрибут метода form равен POST, Rails обрабатывает отправку, как если бы она была PUT. Это сделано для того, чтобы приспособиться к более старым версиям HTML, которые не поддерживают ничего, кроме методов GET и POST. - person zeantsoi; 11.01.2014

Платформа Rails поощряет RESTful дизайн ваших приложений, что означает, что вы будете делать много запросов «PATCH» и «DELETE» (помимо «GET» и «POST»). Однако большинство браузеров не поддерживают другие методы, кроме «GET» и «POST», когда дело доходит до отправки форм.

Итак, вполне нормально использовать POST вместо PUT.

Справочник

person delphaber    schedule 10.01.2014
comment
если я использую метод get в form_tag, метод меняется на get, но если я использую метод put... я все еще получаю метод post?? - person tardjo; 11.01.2014
comment
Да. Rails обходит эту проблему, эмулируя другие методы поверх POST со скрытым вводом с именем _method, который настроен на отражение желаемого метода. В этом случае: ПОСТАВИТЬ - person delphaber; 11.01.2014

Попробуйте ввести

:method => 'get'

Это должно сработать и отобразить get при проверке элемента.

person Jay Lin    schedule 11.04.2015