エラーチェックの評価順序がよくわからない件


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で指定アクション時に

バリデーションするなりしろということかもしれないが、なんか腑に落ちない。

どうしたもんだろう。


  generated by feedpath Rabbit