Rails 3:f.select - options_for_select

时间:2011-03-04 23:01:59

标签: ruby-on-rails-3 forms html-select

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

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

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

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

我希望它默认显示“Select One”,但在提交表单时将其作为不可用的选项。我需要将其编入控制器或模型中吗?或者我的表格编码错了吗?

6 个答案:

答案 0 :(得分:31)

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

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

答案 1 :(得分:20)

这个更清洁:

<%= f.select :phone_type, [ 'Cell', 'Work', 'Office', 'Home', 'Other' ], :prompt => 'Select One' %>

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

答案 2 :(得分:12)

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

<%= f.select :status, options_for_status, {}, prompt: 'Select One' %>

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

def options_for_status
  [
    ['First Option','first_option'],
    ['Second Option','second_option']
  ]
end

答案 3 :(得分:3)

感谢所有提供答案的人。

我正在为我正在进行的项目提供类似的代码,我非常喜欢Ryan Burnette采用的方法。

这对我使用Rails 4.1.0起作用。

<%= f.select :season, options_for_seasons, :prompt => 'Select One' %>

然后我在助手中定义了选项。

def options_for_seasons
  ['Spring', 'Summer', 'Autumn', 'Winter']
end

我选择了:prompt => 'Select One',因为如果以前没有选择季节,我只想在编辑表单中列出“选择一个”选项。

答案 4 :(得分:1)

添加[“Select One”,“”]会使编辑屏幕始终显示“Select One”而不是存储的值。 Rails 3.1(2012年8月17日)

答案 5 :(得分:1)

可以是<%= f.select :phone_type, options_for_select(["Cell", "Work", "Office", "Home", "Other"]), :prompt => "Select One", :class => 'genForm_dropBox' %>