Rails - 如何验证f.select字段?

时间:2012-06-10 10:25:06

标签: ruby-on-rails validation select

我有简单的select字段

f.select(:name, [["- Choose Name -", 0]] + People.all.map{ |c| [c.name, c.id] }) 

如果选择了某个名称,我该如何验证? 我试过这个规则:

  validates :name, :presence => {:message => 'Name cannot be blank.'}

但是如果我在没有选择名字的情况下发送表格,表格就会发送......

所以我想问你,我该如何验证选择字段?

1 个答案:

答案 0 :(得分:4)

在您的示例中,人们 选择一个名称,他们选择名为- Choose Name -且ID为0的人。

如果您想提供一个与真实选择不对应的选项,那么您有两个选择:

f.select(:name, People.all.map{ |c| [c.name, c.id] }, :include_blank => "- Choose Name -")

f.select(:name, People.all.map{ |c| [c.name, c.id] }, :prompt => "- Choose Name -")

这些基本相同。两者都将在选择的顶部显示一个选项,该选项不会导致设置值。但是,如果没有选择当前值,prompt版本将仅显示此额外选项,即如果在编辑表单上使用它将不会让用户通过将其设置回nil来清除其选择

请注意,include_blank方法与以下代码非常相似,只是更具可读性:

f.select(:name, [["- Choose Name -", nil]] + People.all.map{ |c| [c.name, c.id] })