collection_selectとvalidate
collection_selectでリストを作って、選択されていないときにエラーにしようと思った。
Model
validates_presence_of :area_id
View
<%= collection_select :prefecture, :area_id, @areas, :id, :name, {:prompt => '選択してください'} %>
そしたら選択しない時にnil.mapしてるとエラーになった。ぐぐったら、createで@areasを定義してないと。
なるほど、submitしたときにcreateメソッドが呼ばれて@areasはもう無いのか。
ということでcreateメソッドのsave!で成功しなかったときに@areas = Area.find(:all)で設定してあげたら無事バリデーションエラーが表示されましたとさ。
まだまだ簡単なところでつまづくなぁ。