エラーチェックの評価順序がよくわからない件
いろいろはしょってるけどこんな感じのものがあったとする。
def create
@field = Field.new(params[:field])
unless @field.valid?
flash[:notice] = 'バリデーションエラーです。'
redirect_to :action => 'new'
end
if @field.save
flash[:notice] = '項目の新規作成をしました。'
else
render :action => 'new'
end
end
画面から受け取ったパラメータ[:field]は複数のパラメータを持つため、
[:field]自体はnil評価にならないぽい。params.inspectした結果で
"field" => {"name"=>""}
のようになるため。
なので、一応インスタンスを生成して、それのバリデーションチェックで
ひっかけようとするのだが、このコードを実行するとif @field.saveで
nilオブジェクトにメソッドを実行させようとしているというエラーで落ちる。
試行錯誤した結果、アクションの最後まで評価出来るように大きくくくって
あげたのだが、これってきれいじゃない。before_filterで指定アクション時に
バリデーションするなりしろということかもしれないが、なんか腑に落ちない。
どうしたもんだろう。