2012-02-22 29 views
9

tôi có trong một hình thức (form_tag) nhiều hộp kiểm như thế này:Rails 3 - làm thế nào để lưu (un) hộp kiểm tra?

<%=check_box_tag 'model_name[column_name]', 1, (@data.model_name.column_name == 1 ? true : false)%> 

Và cập nhật thích:

variable = ModelName.find(params[:id])    
variable.update_attributes(params[:model_name]) 

này chỉ hoạt động trong một khoảnh khắc, khi tôi kiểm tra một số hộp kiểm - gửi chúng và chúng sẽ được cứu. Đó là tốt. Nhưng khi tôi bỏ chọn tất cả các hộp kiểm - gửi hình thức - vì vậy không có gì happend, trong bảng DB sẽ không thiết lập giá trị trong cột ...

Ông có thể cho tôi bất kỳ đầu, làm thế nào để sửa chữa nó?

Cảm ơn bạn trước

Trả lời

20

Điều này xảy ra bởi vì một hộp kiểm không được kiểm soát sẽ không gửi bất kỳ giá trị cho các máy chủ. Để phá vỡ Rails này cung cấp check_box helper, mà tạo ra mã như thế này:

<input type="hidden" name="model[attr]" value="0" /> 
<input type="checkbox" name="model[attr]" value="1" /> 

Ngoài ra, chèn một lĩnh vực tiềm ẩn với hidden_field_tag:

<%= hidden_field_tag 'model_name[column_name]', '0' %> 
<%= check_box_tag 'model_name[column_name]', 1, (@data.model_name.column_name == 1 ? true : false) %> 
+0

cảm ơn, nhưng đầu vào ẩn phải trước hộp kiểm, trong trình tự như bạn viết nó không hoạt động tôi – user984621

+0

Phương thức này hoạt động, nhưng đối với tôi, tôi có '<% = hidden_field_tag ​​'model_name [column_name]'%>' và nó lưu trữ một tập hợp các dấu trích dẫn trống ở đầu mảng. .. Làm cách nào để loại bỏ các dấu ngoặc đơn trống? – Gcap

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