validates いじってないのに valid? で false になるようになった
作業をすすめていると突然テストが通らなくなって、valid? が false 返すのはいいけど errors みてもなにも message ないし本当にどうしようかと思いました。save(validate: false) でその場をしのいて、結局あとで一つずつコメントアウトしたりして、これ。
Railsでbefore_validationコールバックを使う時の落とし穴 - ぼくたち宇宙人
つまりこれでした。save 時点で is_hoge? 用の boolean を保存しておこうとそういう処理を before_validation にいれとったわけなんですが、わるいことにその代入を一番最後に行っていたので false が代入されると validates は全て通ってるにもかかわらず、valid? は false になっていました。
before_validation :set_is_hoge def set_is_hoge self[:is_hoge] = self[:a] == self[:b] # false だと validation が中断されて死 end
原因をみつけないとぐぐろうにもなにをぐぐっていいかわからない感じで難儀しました。