Railsのform_forを使用しますが、<form>要素にカスタムクラス、属性を設定しますか?


89

form_forどのような「余分な」属性を無視するようでdata-foo属性またはclass渡されたoptions2番目の引数では。

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

出力は、クラスまたは属性の<form>ないタグです。xdata-bar

修正は何ですか?

または、FormBuilder使用せずにインスタンスを取得するにはどうすればよいform_forですか?

回答:


191

:htmlハッシュを使用:

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

または

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

1
これが機能しないことがわかりました:= form_for @user, :html => {'class' => 'x'} do |f|class文字列ではなく記号にする必要があります。
Trantor Liu

11

Rails 4.0.3、Ruby 2.1.0p0->これでうまくいきました=>

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

4

私は同じ問題を抱えていましたが、アプリの他の場所の別のフォームが正常に機能していたことに戸惑いました。

別のform_forの中に誤ってform_forを追加したことに気付きました一度削除すると問題が解決しました。

次に、この構文がRails 4.2で機能することを追加します。

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

ここでは、他の回答の句読点のスープ(おそらく古いRailsバージョンに基づいていた)よりも好ましいと思います。



1

私は運悪く上記を試しましたが、解決策を見つけました。レール4.1.6を使用しています。

これはうまくいきませんでした

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

これは

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

htmlオプションとの違いに注意してください。これが役立つことを願っています


3
うわー、本当に?これらは完全に同等である必要があります。これを再現できますか?Rubyのどのバージョンを使用していますか?
アランH.

@Alan H. Ruby 2.1.3p242の使用 = form_for(:user, :url => login_path, html: {:class => 'login_form'}) do |f| %> これは、私のコードがクラスを適用する唯一の方法でしたが、それ以外の場合は無視されていました。
doz87 2014年

これら2つの行はまったく同じです。間に貯蓄するのを忘れたと思いますか?
nathanvda 2015年

私は知っています、彼らはそうあるべきです。私にとってはそれはうまくいかなかった。保存は問題ではありませんでした。
doz87 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.