2009-04-14 15 views
126

私の質問はthis one と似ていますが、Railsアプリケーションの場合は同じです。ラジオボタンのラベルのラベル

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

は:私が欲しいもの

<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 

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

このような何かを生成

<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> 
+0

ありがとうございました私は助けてくれました:) –

答えて

125
<% 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 %> 
+77

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

+2

Railsの新人として、私はもう一度帰ってきます。それは与えることを続けている贈り物です。とにかく正しい構文を覚えていない限り... :) –

+0

条件付きで 'checked'値を設定したい場合はこれもチェックしてください。http://stackoverflow.com/a/4708921/429521 –

1

あなたは、任意のIDに接頭辞object_nameとしたい場合フォームのフォームヘルパーに電話する必要があります対象:

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

これもあれば、たとえば、任意の提出されたデータがメモリに保存されているフォームオブジェクトのフォームヘルパーメソッドを呼び出すことができない場合など

検証エラーがあるはずです確認しますあなたが使用して名前を補間することができます(radio_button_tagなど)のタグヘルパーを使用している:

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

をここではあなたが任意の提出を維持するために、手動で値を指定する必要があると思います。設計された値のオプション、:labelタグのfor属性を確保するf.labelから:valueオプションを渡す

199

ActionView::Helpers::FormHelper#label

を参照してください対応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 %> 

のIDと同じですradio_buttonタグのラベルをターゲットにする

+4

これは数ヶ月後に答えられたので、これは0票を持つかもしれませんが、実際はそれが良いです。警告:あなたはRails> = 2.3.3を必要とします。 – tokland

+0

このメソッドは、 'field_with_errors' divをレンダリングします(':contactmethod_email'メソッドを使用しても表示されません)。これは正解です! – caesarsol

関連する問題