2008/01/31

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)で設定してあげたら無事バリデーションエラーが表示されましたとさ。

まだまだ簡単なところでつまづくなぁ。

0 件のコメント: