2009-04-14 33 views
126

Câu hỏi của tôi tương tự như this one nhưng đối với ứng dụng Rails.Nhãn cho nút radio ở dạng đường ray

Tôi có biểu mẫu với một số nút radio và muốn liên kết nhãn với chúng. Trình trợ giúp biểu mẫu label chỉ lấy trường biểu mẫu làm tham số, nhưng trong trường hợp này, tôi có nhiều nút radio cho một trường biểu mẫu duy nhất. Cách duy nhất tôi thấy để làm điều đó là tự tạo nhãn, mã hóa cứng ID được tạo tự động cho nút radio. Có ai biết cách tốt hơn để làm điều đó không?

Ví dụ:

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

này tạo ra một cái gì đó như:

<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 

Những gì tôi muốn:

<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

Cảm ơn bạn mã tion đã giúp tôi :) –

Trả lời

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

Có một cách khác nữa: chuyển một tùy chọn ': value' sang' f.label' sẽ làm điều tương tự. ví dụ. '<% = f.label: contactmethod, 'SMS',: value => 'sms'%>'. Điều này đặt thuộc tính "cho" của thẻ nhãn chính xác, điều này làm cho việc nhấp vào nhãn chọn nút radio thích hợp. Trong câu trả lời ở trên, chỉ cần sử dụng helper 'label' sẽ khiến thuộc tính" for "không chính xác khi nút radio được tạo bằng FormBuilder –

+2

Tôi chỉ muốn nói rằng với tư cách là người mới đến Rails, tôi đã tìm thấy câu trả lời này một cái tôi tiếp tục quay trở lại. Đó là món quà tiếp tục tặng. Vâng, cho đến khi tôi nhớ cú pháp thích hợp anyway ... :) –

+0

cũng kiểm tra điều này nếu bạn đang tìm kiếm thiết lập giá trị 'kiểm tra' có điều kiện http://stackoverflow.com/a/4708921/429521 –

1

Nếu bạn muốn object_name tiền tố với bất kỳ ID bạn nên gọi người trợ giúp biểu mẫu trên biểu mẫu đối tượng:

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

này cũng đảm bảo bất kỳ dữ liệu trình được lưu trữ trong bộ nhớ nên có bất kỳ lỗi xác nhận, vv

Nếu bạn không thể gọi phương thức hình thức helper trên đối tượng hình thức, ví dụ nếu bạn đang sử dụng một thẻ helper (radio_button_tag vv), bạn có thể suy tên sử dụng:

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

Trong trường hợp này bạn cần phải xác định giá trị bằng tay để bảo vệ bất kỳ đệ trình.

199

Đi qua tùy chọn :value-f.label sẽ đảm bảo for thuộc tính tag nhãn là giống như id của radio_button tương ứng

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

Xem ActionView::Helpers::FormHelper#label

sự: Tùy chọn giá trị, được thiết kế để nhắm mục tiêu nhãn cho thẻ radio_button

+4

tốt, điều này có thể có 0 phiếu vì nó đã được trả lời vài tháng sau đó, nhưng thực sự nó là tốt nhất. Lưu ý: bạn cần Rails> = 2.3.3 – tokland

+0

phương thức này cũng hiển thị div 'field_with_errors' khi cần thiết (không hiển thị khi sử dụng phương thức': contactmethod_email').Đây là câu trả lời chính xác! – caesarsol

Các vấn đề liên quan