Tôi đang sử dụng Rails 3.2.0.rc2 . Tôi có một Model
, trong đó tôi có một tĩnh Array
mà tôi đang cung cấp thông qua một biểu mẫu để người dùng có thể chọn một tập hợp con Array
và lưu lựa chọn của họ vào cơ sở dữ liệu, được lưu trữ trong một cột duy nhất Model
. Tôi đã sử dụng serialize trên cột cơ sở dữ liệu lưu trữ Array
và Rails đang chuyển đổi chính xác các lựa chọn của người dùng thành Yaml (và quay lại một mảng khi đọc cột đó). Tôi đang sử dụng đầu vào biểu mẫu nhiều lựa chọn để thực hiện các lựa chọn.
Vấn đề của tôi là, theo cách tôi hiện có, mọi thứ hoạt động như tôi mong đợi ngoại trừ mảng tập hợp con của người dùng luôn có phần tử trống đầu tiên khi nó được gửi đến máy chủ.
Đây không phải là vấn đề lớn và tôi có thể viết mã để loại bỏ điều đó sau khi thực tế, nhưng tôi cảm thấy như tôi chỉ đang mắc một số loại lỗi cú pháp vì dường như tôi không nghĩ rằng hành vi Rails mặc định là cố ý thêm phần tử trống này mà không có lý do. Tôi hẳn đã bỏ lỡ điều gì đó hoặc quên tắt một số loại cài đặt. Vui lòng giúp tôi hiểu những gì tôi đang thiếu (hoặc chỉ cho tôi một số tài liệu tốt mô tả điều này với độ sâu hơn những gì tôi có thể tìm thấy trên các ống).
Các 'mô hình' Bảng Cơ sở dữ liệu MySQL:
- bao gồm một cột có tên
subset_array
là trường TEXT
Mô hình lớp bao gồm các cài đặt sau:
serialize :subset_array
ALL_POSSIBLE_VALUES = [value1, value2, value3, ...]
Biểu mẫu để chỉnh sửa Mô hình bao gồm tùy chọn đầu vào sau:
f.select :subset_array, Model::ALL_POSSIBLE_VALUES, {}, :multiple => true, :selected => @model.subset_array
PUT đến máy chủ từ máy khách trông giống như sau:
- giả sử chỉ value1 và value3 được chọn
"model" => { "subset_array" => ["", value1, value3] }
Cập nhật cơ sở dữ liệu trông như thế này:
UPDATE 'models' SET 'subset_array' = '--- \n- \"\"\n- value1\n- value3\n'
Như bạn có thể thấy, có phần tử thừa, trống, này trong mảng đang được gửi và đặt trong cơ sở dữ liệu. Làm thế nào để tôi thoát khỏi điều đó? Có thông số nào tôi bị thiếu trong f.select
cuộc gọi của mình không?
Cảm ơn rất nhiều đánh giá cao :)
CHỈNH SỬA : Đây là mã HTML được tạo từ f.select
câu lệnh. Có vẻ như có một đầu vào ẩn đang được tạo ra có thể là nguyên nhân gây ra sự cố của tôi? Tại sao lại ở đó?
<input name="model[subset_array][]" type="hidden" value>
<select id="model_subset_array" multiple="multiple" name="model[subset_array][]" selected="selected">
<option value="value1" selected="selected">Value1</option>
<option value="value2">Value2</option>
<option value="value3" selected="selected">Value3</option>
<option...>...</option>
</select>
f.select
đang tạo không? Ngoài ra, hành vi này có xảy ra ngay cả khi tạo hay chỉ là khi cập nhật?