web-dev-qa-db-fra.com

Inclure un blanc pour le premier élément dans la liste de sélection dans la balise options_for_select

J'ai essayé :include_blank => true, mais cela n'a pas fonctionné.

<select>
    <%= options_for_select Model.all.collect{|mt| [mt.name, mt.id]} %>
</select>

Si je dois l'ajouter à la collection, comment feriez-vous cela?

58
B Seven

Je pense que vous voulez ce format:

select("model_name", "model_id", Model.all.collect {|mt| [ mt.name, mt.id ] }, {:include_blank => 'name of your blank Prompt'})

BTW: supposait que Model était censé être Model. Pour utiliser à l'aide de collection_select:

collection_select(:model, :model_id, Model.all, :id, :name, :Prompt => true)
83
Chris Barretto

Je pense que les options :include_blank Existent uniquement pour les champs select liés à un modèle.

En supposant que vous souhaitiez utiliser une balise <select> Au lieu d'une <%= select(...) %> liée à un modèle, vous pouvez insérer une entrée vide au début de vos résultats:

<%= options_for_select Modle.all.collect{|mt| [mt.name, mt.id]}.insert(0, "") %>
26
Dylan Markow

Puisque vous avez marqué comme balise de sélection, vous pouvez utiliser l'option include_blank avec select_tag.

De la documentation:

select_tag "people", options_from_collection_for_select(@people, "id", "name"), :include_blank => true

# => <select id="people" name="people"><option value=""></option><option value="1">David</option></select>

Ou vous pouvez utiliser options_for_select:

<%= select_tag column.name, options_for_select(Model.all.collect{|mt| [mt.name, mt.id]}), :include_blank => true %>
18
Paulo Fidalgo
<%= options_for_select Model.all.collect{|x| [x.name,x.id]}.unshift(["",nil]) %>
6
Weston Ganger

Si vous voulez une solution lisse, vous pouvez utiliser mon bijou rearmed_Rails qui a une fonctionnalité qui permet de patcher en toute sécurité avec le singe options_for_select et options_for_collection_select

Rails g rearmed_Rails:setup

Ouvrir config/initializers/rearmed_Rails.rb et remplacez les valeurs suivantes par true

options_for_select_include_blank: true,
options_from_collection_for_select_include_blank: true


Maintenant, chaque fois que vous avez besoin d'un blanc inclus, procédez simplement comme suit:

<%= options_for_select(Model.all.map{|x| [x.name,x.id]}, include_blank: true) %>
1
Weston Ganger
= select_tag "some_value", options_for_select(Model.all.collect{ |x| [x.name, x.id]}.prepend([t('helpers.some_name'), nil]), :selected => params[:some_value])
1
Simon Liu