8

私は今これを持っています:

<%= f.select :credit, (0..500) %>

これにより、次のようになります。

<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
...

その選択に「すべて」であり、どの値がnilである必要がある別のオプションをどのように追加しますか?

4

2 に答える 2

13

これはほとんどあなたが望むことをするでしょう:

<%= f.select :credit, ((0..500).map {|i| [i,i] } << ["No limit",nil]) %>

selectオプションのリストには、さまざまな形式をとることができます。それらの1つは、ここに示すように、配列の配列です。外側の配列の各要素は2要素の配列であり、表示されたオプションテキストとフォーム値がこの順序で含まれています。

上記はこのような配列にmapなり(0..500)、表示されるオプションはフォームの値と同じです。次に、最後のオプションが1つ追加されます。

「無制限」が選択されている場合、これによりパラメータに「」(空の文字列)の値が生成されることに注意してください。フォームに選択フィールドを入力してフォームを送信すると、ブラウザはそのフォームパラメータに何かnilを送信します。また、フォームパラメータとして明示的に送信する方法はありません。本当に必要な場合は、巧妙なjavascriptを使用して、ブラウザーにパラメーターをまったく送信させないようにすることができますが、それは単に追加するよりも手間がかかります。

param[:credit] == "" and param[:credit] = nil

コントローラのアクションに。

于 2012-04-06T04:23:14.263 に答える