我有简单的select
字段
f.select(:name, [["- Choose Name -", 0]] + People.all.map{ |c| [c.name, c.id] })
如果选择了某个名称,我该如何验证? 我试过这个规则:
validates :name, :presence => {:message => 'Name cannot be blank.'}
但是如果我在没有选择名字的情况下发送表格,表格就会发送......
所以我想问你,我该如何验证选择字段?
答案 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] })