Rails 3:f.select - options_for_select

med*_*rts 32 forms html-select ruby-on-rails-3

我在Ruby on Rails3应用程序上有一个表单,带有一个下拉菜单,这是我当前的select选项代码:

<%= f.select :phone_type, options_for_select(["Select One", "Cell", "Work", "Office", "Home", "Other"],:disabled => ["Select One"]), :class => 'genForm_dropBox' %>
Run Code Online (Sandbox Code Playgroud)

根据我的理解,当有人打开页面时,这应该有"Select One"作为默认选项,但如果他们没有选择其他选项之一,则当他们点击提交时会显示错误.

在Safari和Chrome以及IE7等浏览器中也是如此,但在Firefox和IE8中,它显示"Cell"作为第一个选项,因为Select One被禁用.

我希望它默认显示"Select One",但在提交表单时将其作为不可用的选项.我需要将其编入控制器或模型中吗?或者我是否以错误的形式编码?

med*_*rts 34

对于那些希望采用这一功能的人来说,我采用了一种新的方法,从模型结束.由于需要填写所有字段以便用户提交并且没有收到错误警报,因此我将"提交一个"选项的默认值设置为空.您可以查看以下代码,了解我是如何做到的.

<%= f.select :phone_type, options_for_select([["Select One", ""], "Cell", "Work", "Office", "Home", "Other"]), :class => 'genForm_dropBox' %>
Run Code Online (Sandbox Code Playgroud)

  • 我想你也可以在选择中使用`:prompt =>"Select One"或`:include_blank =>"Select One"`,我不确定它是否适用于options_for_select (3认同)

dan*_*ker 20

这有点清洁:

<%= f.select :phone_type, [ 'Cell', 'Work', 'Office', 'Home', 'Other' ], :prompt => 'Select One' %>
Run Code Online (Sandbox Code Playgroud)

:prompt参数生成一个空值的选项.


rb-*_*rb- 12

在Rails 4中,这种方法对我很有用.

<%= f.select :status, options_for_status, {}, prompt: 'Select One' %>
Run Code Online (Sandbox Code Playgroud)

与此同时,我已经在帮助器中定义了选项,以防止杂乱无章.

def options_for_status
  [
    ['First Option','first_option'],
    ['Second Option','second_option']
  ]
end
Run Code Online (Sandbox Code Playgroud)