Rails和表单:下拉数字范围和无限制

时间:2012-04-06 04:03:51

标签: ruby-on-rails forms drop-down-menu

我现在有这个:

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

2 个答案:

答案 0 :(得分:9)

这将几乎做你想做的事:

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

到您的控制器操作。

答案 1 :(得分:7)

如果我正确理解了这个问题,您可以使用options_for_selectprompt比所选答案中显示的更清晰:

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

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