web-dev-qa-db-ja.com

options_for_selectタグの選択リストの最初のアイテムに空白を含める

私は試した :include_blank => true、しかしそれは機能しませんでした。

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

コレクションに追加する必要がある場合、どのようにしますか?

58
B Seven

この形式が必要だと思います:

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

ところで:モデルがモデルであると仮定したと仮定していました。 collection_selectを使用して使用するには:

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

_:include_blank_オプションは、モデルに関連付けられたselectフィールドにのみ存在すると考えています。

モデルに結び付けられた<%= select(...) %>の代わりにプレーンな_<select>_タグを使用すると仮定すると、結果の前に空白のエントリを挿入できます。

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

Select-tagとしてタグ付けしたので、include_blankselect_tagオプションを使用できます。

ドキュメントから:

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>

または、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

洗練されたソリューションが必要な場合は、私のgem rearmed_Rails これには、安全にモンキーパッチを適用する機能がありますoptions_for_selectおよびoptions_for_collection_select

Rails g rearmed_Rails:setup

開いた config/initializers/rearmed_Rails.rbおよび次の値をtrueに変更します

options_for_select_include_blank: true,
options_from_collection_for_select_include_blank: true


今、空白を含める必要があるときはいつでも、次の操作を行ってください。

<%= 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