Ray formundaki radyo düğmeleri için etiketler


147

Sorum benzer bu bir ama Raylar uygulama için.

Bazı radyo düğmeleri olan bir form var ve etiketleri onlarla ilişkilendirmek istiyorum. labelForm yardımcı yalnızca bir parametre olarak bir form alanını alır, ama bu durumda tek bir form alanı için birden fazla radyo düğmeleri var. Bunu yapmanın tek yolu el ile bir etiket oluşturmak, radyo düğmesi için otomatik olarak oluşturulan kimliği sabit kodlamaktır. Bunu yapmanın daha iyi bir yolunu bilen var mı?

Örneğin:

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

Bu şöyle bir şey üretir:

<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

İstediğim:

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

Yanıtlar:


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
Başka bir yol daha var: aynı şeyi yapmak için bir :valueseçeneği geçmek f.label. örn <%= f.label :contactmethod, 'SMS', :value => 'sms' %>. Bu, etiket etiketinin "for" özelliğini doğru şekilde ayarlar, bu da etikete tıklamanın uygun radyo düğmesini seçmesini sağlar. Yukarıdaki cevapta, sadece labelyardımcısı kullanmak "for" özniteliğinin FormBuilder
John

2
Sadece Rails'e yeni gelen biri olarak, bu cevabı geri dönmeye devam ettiğimi bulduğumu söylemek istedim. Vermeye devam eden hediye. Yine de doğru sözdizimini hatırlayana kadar ... :)
John Gallagher

checkedDeğeri koşullu olarak ayarlamak istiyorsanız bunu da kontrol edin stackoverflow.com/a/4708921/429521
Felipe Sabino

8
Gelecekteki okuyucular için John Douthat'ın bu soruya doğru cevabı var. Bu cevap artık doğru değil.
superluminary

230

Etiket etiketinin özelliğinin karşılık gelenin kimliğiyle aynı olmasını sağlamak için :valueseçeneği iletmekf.labelforradio_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 %>

Bkz. ActionView :: Helpers :: FormHelper # label

radio_button etiketleri için etiketleri hedeflemek üzere tasarlanmış the: value seçeneği


5
Bu, 0 ay sürebilir, çünkü aylar sonra cevaplandı, ama aslında iyi olanı. Uyarı:
Raylara

3
bu yöntem field_with_errorsgerektiğinde div öğesini de oluşturur ( :contactmethod_emailyöntemi kullanırken görünmez ). bu doğru cevap!
caesarsol

1

Object_name'in herhangi bir kimliğe önek olmasını istiyorsanız, form nesnesindeki form yardımcılarını çağırmalısınız:

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

Bu aynı zamanda herhangi bir doğrulama hatası vb. Olması durumunda gönderilen verilerin bellekte depolanmasını sağlar.

Form nesnesindeki form yardımcı yöntemini çağıramıyorsanız, örneğin bir etiket yardımcısı (radio_button_tag vb.) Kullanıyorsanız, aşağıdakileri kullanarak adı enterpolasyon yapabilirsiniz:

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

Bu durumda, gönderimleri korumak için değeri manuel olarak belirtmeniz gerekir.


0

Kullanılması true/ falseforma geçirilen model zaten doldurulmuş bu özeliği varsa değer alanı önceden doldurulmuş olacak gibi:

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

0

Kullanarak derecelendirilmesinden projemden Bu örnek radiodüğmeleri ve 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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.