레일 형태의 라디오 버튼 레이블


147

내 질문은 유사하다 이 하나 있지만, 레일 응용 프로그램에 대한.

라디오 버튼이있는 양식이 있으며 레이블을 연결하고 싶습니다. 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의 새로운 이민자로서, 나는이 답이 내가 계속 돌아 오는 답을 찾았다 고 말하고 싶었다. 계속주는 선물입니다. 글쎄, 난 어쨌든 올바른 구문을 기억까지 ... :)
존 갤러거

당신은 설정을 찾고 있다면이를 확인 checked조건부 값을 stackoverflow.com/a/4708921/429521
펠리페 비노을

8
미래의 독자들에게 John Douthat은이 질문에 대한 정답을 가지고 있습니다. 이 답변은 더 이상 정확하지 않습니다.
superluminary

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을 참조하십시오.

radio_button 태그의 레이블을 대상으로하도록 설계된 : value 옵션


5
글쎄, 이것은 몇 달 후에 답변 되었기 때문에 0 투표를 할 수도 있지만 실제로는 좋은 투표입니다. 주의 사항 : Rails> = 2.3.3 필요
tokland

3
이 메소드는 field_with_errors필요할 때 div를 렌더링합니다 ( :contactmethod_email메소드를 사용할 때 표시되지 않음 ). 이것이 정답입니다!
caesarsol

1

object_name 앞에 ID를 붙이려면 양식 객체에서 양식 도우미를 호출해야합니다.

- 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.