Использовать форму Rails для установки пользовательских классов, атрибутов на элементе?


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

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

выход <form> тег не x класса или .

что исправить?

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

5 71

5 ответов:

использовать :html хэш:

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

или

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

Rails 4.0.3, Ruby 2.1. 0p0 -> это сработало для меня=>

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

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

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

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

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

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

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

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

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

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

это не работает

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

это ничего

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

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