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

Hom*_*ith 5 forms ruby-on-rails drop-down-menu

我现在有这个:

<%= f.select :credit, (0..500) %>
Run Code Online (Sandbox Code Playgroud)

这将导致:

<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>
...
Run Code Online (Sandbox Code Playgroud)

如何在该选项中添加另一个选项,即" 全部 ",哪个值应为零

Mic*_*ade 10

几乎可以做你想要的:

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

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

map上述转动(0..500)到这样的阵列,其中,显示的选项是相同的形式的值.然后添加最后一个选项.

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

param[:credit] == "" and param[:credit] = nil
Run Code Online (Sandbox Code Playgroud)

你的控制器动作.


Jav*_*mae 8

如果我正确理解了这个问题,你可以使用options_for_selectprompt比所选答案中显示的更干净一点:

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

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