0

我有简单select的领域

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

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

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

但是,如果我在不选择名称的情况下发送表单,则会发送表单...

所以我想问你,我怎样才能验证选择字段?

4

1 回答 1

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] })
于 2012-06-10T10:36:29.083 回答