2012-04-13

railsのbefore_saveでbooleanの値をセットしようとしたらエラーになってしまった

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
rails2.3でのお話です。

あるモデルに以下のようにbooleanの値を設定するbefore_saveを作成しました。

def before_save
  if age >= 20
    a_flag = true
    c_flag = false
  end
end

これでageが20以上のデータを保存しようとしたら、できなったのです。
エラーログを見ても何もでていません。

気づく人はすぐ気づくのでしょうが、私は無駄に時間を食ってしまいました・・・

これは、以下のようにすれば問題なくなります。

def before_save
  if age >= 20
    a_flag = true
    c_flag = false
    true
  end
end

before_saveなどは戻り値としてfalseを返すと、アクションをキャンセルすることができます。
最初のbefore_saveだと、ageが20以上の場合は、最後に実行されるのが

c_flag = false


となり、最後に実行したものがbefore_saveの戻り値になり、この場合はfalseを返してることになっていたので失敗していたという感じでした。


コメントを投稿