Rails 3.2.0.rc2를 사용 하고 있습니다. 나는를 가지고 Model
있는 나는 정적이, Array
나는 사용자의 하위 집합을 선택할 수 있도록 형태를 통해 제공하고있어 Array
및 단일 열에 저장된 데이터베이스, 자신의 선택 사항을 저장을 Model
. 를 저장하는 데이터베이스 열에서 직렬화를 사용 Array
했으며 Rails가 사용자의 선택을 Yaml로 올바르게 변환하고 해당 열을 읽을 때 배열로 다시 변환합니다. 다중 선택 양식 입력을 사용하여 선택하고 있습니다.
내 문제는 내가 현재 가지고있는 방식으로, 사용자의 하위 집합 배열이 서버로 전송 될 때 항상 빈 첫 번째 요소가 있다는 점을 제외하고는 모든 것이 예상대로 작동한다는 것입니다.
이것은 큰 문제가 아니며, 사실 후에 그것을 잘라내는 코드를 작성할 수 있지만, 기본 Rails 동작이 의도적으로 작동하지 않는 것 같아서 일종의 구문 오류를 만드는 것 같습니다. 어떤 이유없이이 빈 요소를 추가합니다. 나는 뭔가를 놓쳤거나 어떤 종류의 설정을 비활성화하는 것을 잊었을 것입니다. 내가 무엇을 놓치고 있는지 이해하도록 도와주세요 (또는 intertubes에서 찾을 수 있었던 것보다 더 깊이 이것을 설명하는 좋은 문서를 알려주세요).
MySQL 데이터베이스 테이블 '모델':
subset_array
TEXT 필드 인 이름 이 지정된 열을 포함 합니다.
클래스 모델에는 다음 설정이 포함됩니다.
serialize :subset_array
ALL_POSSIBLE_VALUES = [value1, value2, value3, ...]
모델 편집을위한 양식에는 다음 입력 옵션이 포함됩니다.
f.select :subset_array, Model::ALL_POSSIBLE_VALUES, {}, :multiple => true, :selected => @model.subset_array
클라이언트에서 서버로의 PUT는 다음과 같습니다.
- value1 및 value3 만 선택되었다고 가정합니다.
"model" => { "subset_array" => ["", value1, value3] }
데이터베이스 업데이트는 다음과 같습니다.
UPDATE 'models' SET 'subset_array' = '--- \n- \"\"\n- value1\n- value3\n'
보시다시피, 데이터베이스에 전송 및 설정되는 배열에이 여분의 빈 요소가 있습니다. 어떻게 제거합니까? 내 f.select
호출 에서 누락 된 매개 변수가 있습니까?
대단히 감사합니다 :)
편집 : 이것은 f.select
명령문 에서 생성 된 HTML 코드입니다 . 내 문제의 원인이 될 수있는 숨겨진 입력이 생성되는 것 같습니다. 왜 거기에 있습니까?
<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
생성 중인 HTML 스 니펫을 게시 할 수 있습니까? 또한이 동작은 생성시에도 발생합니까, 아니면 업데이트시에만 발생합니까?