2017-09-07 9 views
0

J'essaie de créer une étiquette de sélection dans un formulaire_pour lequel je peux sélectionner plusieurs catégories parmi les options. J'ai regardé le Rails documentation et ce SO, mais aucun d'eux ne semble fonctionner. Jusqu'à présent, je ceci:Comment créer une étiquette de sélection dans Form_for Rails

<select class="selectpicker" data-style="form-control" multiple title="Choose Department(s)" data-size="5"> 
    <%= options_from_collection_for_select(Category.all, :id, :name)%> 
</select> 

Et mon form_for ressemble à ceci:

<%= form_for(@listing, :html => {class: "form-horizontal" , role: "form"}) do |f| %> 

Mes listes peuvent avoir de nombreuses catégories. Comment suis-je censé faire cette sauvegarde à ma forme? Pour le moment, les catégories ne sont pas sauvegardées lorsque je soumets mon formulaire.

+0

Donc, vous avez un problème avec la sélection de plusieurs éléments? – Mohanraj

+0

Non, la balise de sélection fonctionne correctement. Je peux sélectionner plusieurs catégories, mais il ne sauvegarde pas dans la base de données lorsque je soumets le formulaire. –

+0

Quel est le nom du champ? Également poster quelques codes et paramètres ruby. – Mohanraj

Répondre

1

Cela ne fonctionne pas car votre sélection n'est pas étendue à votre objet @listing. Essayez:

<%= f.collection_select(:category_id, Category.all, :id, :name) %> 

Pour répondre @ commentaire de ddubs suggérant de remplacer l'étiquette select avec une forme Rails aide ainsi que de garder vos attributs de données HTML personnalisé:

<%= f.collection_select(:category_ids, Category.all, :id, :name, {}, class: "selectpicker", title: "Choose Department(s)", multiple: true, data: { style: "form-control", size: "5" }) %> 

Pour plus d'informations sur collection_select les options, consultez au Rails api.

+0

Donc je mets '<% = f.collection_select (: category_ids, Category.all,: id,: nom, class: "selectpicker", style de données: "form-control", multiple: true, title: "Choisir département (s)", taille de données: "5")%> 'et il génère une erreur. Je pense que c'est à cause du tiret dans le style de données et la taille des données. Toute idée de comment je peux faire en sorte que cela soit reconnu comme un attribut de la balise de sélection que je veux changer? –

+0

Mis à jour ma réponse. Vous pouvez transmettre des attributs HTML personnalisés (par exemple HTML5 'data-') avec quelque chose comme 'data: {size: 5, style: 'form-control'}'. – mmichael

+0

J'ai fini par utiliser '<% = f.collection_select (: category_ids, Category.all,: id,: nom, {:" style de données "=>" form-control ", multiple: true,:" taille de données "=>" 5 "}, {class:" selectpicker ", title:" Choisissez Département (s) "})%>'. Maintenant, le seul problème est le "multiple" ne fonctionne pas. –

0

La réponse finale a fini par être <%= f.collection_select(:category_ids, Category.all, :id, :name,{:"data-style" => "form-control", :"data-size" => "5"}, {class: "selectpicker", title: "Choose Department(s)", multiple: true}) %> comme l'a souligné mmichael.