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

実際の選択に対応しないオプションを提供したい場合は、2つのオプションがあります。

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 に答える