レール形式のラジオボタンのラベル


147

私の質問はこれに似ています が、Railsアプリに関するものです。

いくつかのラジオボタンを持つフォームがあり、ラベルをそれらに関連付けたいのですが。labelフォームヘルパーは、唯一のパラメータとしてフォームフィールドを取りますが、この場合には、私は、単一のフォームフィールドの複数のラジオボタンがあります。ラベルを手動で作成して、ラジオボタン用に自動生成されるIDをハードコーディングするのが唯一の方法です。誰かがそれを行うためのより良い方法を知っていますか?

例えば:

<% form_for(@message) do |f| %>
    <%= label :contactmethod %>
    <%= f.radio_button :contactmethod, 'email', :checked => true %> Email
    <%= f.radio_button :contactmethod, 'sms' %> SMS
<% end %>

これは次のようなものを生成します:

<label for="message_contactmethod">Contactmethod</label>
<input checked="checked" id="message_contactmethod_email" name="message[contactmethod]" value="email" type="radio"> Email
<input id="message_contactmethod_sms" name="message[contactmethod]" value="sms" type="radio"> SMS

私が欲しいもの:

<input checked="checked" id="message_contactmethod_email" name="message[contactmethod]" value="email" type="radio"><label for="message_contactmethod_email">Email</label>
<input id="message_contactmethod_sms" name="message[contactmethod]" value="sms" type="radio"> <label for="message_contactmethod_sms">SMS</label>

回答:


145
<% form_for(@message) do |f| %>
  <%= f.radio_button :contactmethod, 'email', :checked => true %> 
  <%= label :contactmethod_email, 'Email' %>
  <%= f.radio_button :contactmethod, 'sms' %>
  <%= label :contactmethod_sms, 'SMS' %>
<% end %>

91
別の方法もあり:valueます。オプションを渡しf.labelて同じことを行います。例えば<%= f.label :contactmethod, 'SMS', :value => 'sms' %>。これにより、ラベルタグの「for」属性が正しく設定され、ラベルをクリックして適切なラジオボタンが選択されます。上記の回答でlabelは、ラジオボタンがFormBuilderで作成されたときにヘルパーを使用するだけで「for」属性が正しく表示されません
John Douthat

2
Railsの初心者として、私がこの答えを何度も何度も見ていると思いました。それは与え続ける贈り物です。まあ、とにかく正しい構文を覚えているまで... :)
John Gallagher '20

あなたが設定を探している場合にもこれを確認するchecked条件付き値をstackoverflow.com/a/4708921/429521
フェリペサビノを

8
今後の読者のために、John Douthatがこの質問に対する正しい答えを持っています。この答えは正しくありません。
超光速2014

230

:valueオプションを渡すと、f.labelラベルタグのfor属性が対応するIDと同じになります。radio_button

<% form_for(@message) do |f| %>
  <%= f.radio_button :contactmethod, 'email' %> 
  <%= f.label :contactmethod, 'Email', :value => 'email' %>
  <%= f.radio_button :contactmethod, 'sms' %>
  <%= f.label :contactmethod, 'SMS', :value => 'sms' %>
<% end %>

ActionView :: Helpers :: FormHelper#labelを参照してください

:valueオプション。これは、radio_buttonタグのラベルをターゲットにするように設計されています


5
まあ、これは数か月後に回答されたため、投票数が0になる可能性がありますが、実際には良い票です。警告:Rails> = 2.3.3が必要
tokland

3
このメソッドは、field_with_errors必要に応じてdiv もレンダリングします(:contactmethod_emailメソッドの使用時には表示されません)。これが正解です。
caesarsol 2014

1

IDの前にobject_nameを付ける場合は、フォームオブジェクトのフォームヘルパーを呼び出す必要があります。

- form_for(@message) do |f|
  = f.label :email

これにより、検証エラーなどが発生した場合でも、送信されたデータがメモリに確実に保存されます。

タグヘルパー(radio_button_tagなど)を使用している場合など、フォームオブジェクトのフォームヘルパーメソッドを呼び出せない場合は、次のコマンドを使用して名前を補間できます。

= radio_button_tag "#{f.object_name}[email]", @message.email

この場合、送信を保持するために値を手動で指定する必要があります。


0

true/ falseを値として使用すると、フォームに渡されたモデルにこの属性がすでに入力されている場合、フィールドは事前入力されています。

= f.radio_button(:public?, true)
= f.label(:public?, "yes", value: true)
= f.radio_button(:public?, false)
= f.label(:public?, "no", value: false)

0

これは、radioボタンとそのlabels を使用して評価するための私のプロジェクトの例です

<div class="rating">
  <%= form.radio_button :star, '1' %>
  <%= form.label :star, '☆', value: '1' %>

  <%= form.radio_button :star, '2' %>
  <%= form.label :star, '☆', value: '2' %>

  <%= form.radio_button :star, '3' %>
  <%= form.label :star, '☆', value: '3' %>

  <%= form.radio_button :star, '4' %>
  <%= form.label :star, '☆', value: '4' %>

  <%= form.radio_button :star, '5' %>
  <%= form.label :star, '☆', value: '5' %>
</div>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.