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>
...

我将如何在该选择中添加另一个选项,即“ All ”以及哪个值应该是nil

4

2 回答 2

13

几乎可以满足您的要求:

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

select选项列表可以采用多种格式。其中一个是数组数组,如此处给出。外部数组中的每个元素都是一个 2 元素数组,按顺序包含显示的选项文本和表单值。

map上面变成了这样的(0..500)数组,其中显示的选项与表单值相同。然后添加最后一个选项。

请注意,如果选择了“无限”,这将为参数生成一个值“”(一个空字符串) - 如果您将选择字段放入表单并提交表单,浏览器将为该表单参数发送一些内容,并且没有办法nil明确地作为表单参数发送。如果你真的想要,你可以使用一些聪明的 javascript 来让浏览器根本不发送参数,但这比简单地添加更多的工作:

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

到您的控制器操作。

于 2012-04-06T04:23:14.263 回答
8

如果我正确理解了这个问题,您可以比所选答案中显示的更干净地使用options_for_select和执行此操作:prompt

<%= f.select :credit, options_for_select(0..500), { prompt: "No Limit" } %>

请参阅此处的文档:http: //apidock.com/rails/ActionView/Helpers/FormOptionsHelper/select

于 2014-09-26T00:58:40.603 回答