J'utilise Rails 3.2.0.rc2 . J'ai un Model
dans lequel j'ai un fichier statique Array
que je propose par le biais d'un formulaire de sorte que les utilisateurs puissent sélectionner un sous-ensemble de Array
et sauvegardent leur sélection dans la base de données, stockée dans une seule colonne de la base de données. Model
. J'ai utilisé serialize sur la colonne de la base de données qui stocke l'adresse de l'utilisateur. Array
et Rails convertit correctement les sélections des utilisateurs en Yaml (et de nouveau en tableau lors de la lecture de cette colonne). J'utilise un formulaire à sélection multiple pour effectuer les sélections.
Le problème est que, dans l'état actuel des choses, tout fonctionne comme prévu, sauf que le tableau de sous-ensembles de l'utilisateur comporte toujours un premier élément vide lorsqu'il est envoyé au serveur.
Ce n'est pas très grave, et je pourrais écrire du code pour le supprimer après coup, mais j'ai l'impression de faire une erreur de syntaxe, car il ne me semble pas que le comportement par défaut de Rails ajoute intentionnellement cet élément vide sans raison. J'ai dû manquer quelque chose ou oublier de désactiver un paramètre quelconque. Aidez-moi à comprendre ce qui m'échappe (ou indiquez-moi une bonne documentation qui décrit ce problème de manière plus approfondie que ce que j'ai pu trouver sur Internet).
Base de données MySQL Table 'models' :
- comprend une colonne nommée
subset_array
qui est un champ TEXTE
Le modèle de classe comprend les paramètres suivants :
serialize :subset_array
ALL_POSSIBLE_VALUES = [value1, value2, value3, ...]
Le formulaire d'édition des modèles comprend l'option de saisie suivante :
f.select :subset_array, Model::ALL_POSSIBLE_VALUES, {}, :multiple => true, :selected => @model.subset_array
PUT au serveur depuis le client ressemble à quelque chose comme ça :
- en supposant que seules les valeurs 1 et 3 sont sélectionnées.
"model" => { "subset_array" => ["", value1, value3] }
La mise à jour de la base de données ressemble à ceci :
UPDATE 'models' SET 'subset_array' = '--- \n- \"\"\n- value1\n- value3\n'
Comme vous pouvez le voir, il y a un élément supplémentaire, vide, dans le tableau qui est envoyé et défini dans la base de données. Comment puis-je m'en débarrasser ? Est-ce qu'il y a un paramètre que j'ai oublié dans mon fichier f.select
appeler ?
Merci beaucoup.)
EDITAR : Il s'agit du code HTML généré à partir du f.select
déclaration. Il semble qu'une entrée cachée soit générée, ce qui pourrait être la cause de mon problème. Pourquoi cette entrée est-elle présente ?
<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>