Использовать Rails form_for, но установить пользовательские классы, атрибуты в элементе <form>?

form_for, кажется, игнорирует любые дополнительные атрибуты, такие как атрибут data-foo или class, переданный как options во втором аргументе.

= form_for @user, {:url => 'foo', :class => 'x', 'data-bar' => 'baz' } do |f|
  # ...

Вывод тега <form> без атрибута x или data-bar.

Какое исправление?

Или, как я могу захватить экземпляр FormBuilder без использования form_for?

Ответ 1

Используйте хеш :html:

= form_for @user, :html => {:class => 'x', 'data-bar' => 'baz'} do |f|

или

= form_for @user, :html => {class: 'x', data: { bar: 'baz' } } do |f|

Ответ 2

Rails 4.0.3, Ruby 2.1.0p0 → это сработало для меня = >

<%= form_for(@contact, :html => {:class => 'form_height'}) do |f| %><% if     @contact.errors.any? %>

Ответ 3

У меня была такая же проблема, но был озадачен тем, что другая форма в моем приложении работает нормально.

Я понял, что случайно добавил form_for внутри другого form_for, который после удаления устранил проблему.

Во-вторых, я должен добавить, что этот синтаксис работает для меня в Rails 4.2:

<%= form_for @type, html: {class: "form-horizontal"} do |f| %>

Мне кажется предпочтительнее препинания-суп из других ответов здесь (которые, возможно, были основаны на более ранней версии Rails).

Ответ 4

В основном помощники, последний аргумент arg - это хэш html-параметров для элемента.

= form_for @user, :html => {:class => 'x', 'data-bar' => 'baz'} %>

Вы также можете проверить другие альтернативы в документации ActionsView:: Helpers:: FormHelper

Ответ 5

Я попробовал выше, не повезло, но нашел решение. Я использую рельсы 4.1.6.

Это не сработало

= form_for @user, :html => {:class => 'x', 'data-bar' => 'baz'} %>

Это сделало

= form_for @user, html: {:class => 'x', 'data-bar' => 'baz'} %>

Обратите внимание на разницу с опцией html, надеюсь, что это поможет