August 22, 2012

Rails ActiveRecord Callback 的返回值

Rails 提供的约定非常强大而且灵活, 但是需要熟练掌握和小心使用. 最近我就由于没注意 active-record callback 的一个约定而中枪.

问题的现象是当保存一个 model 的对象时, 结果被 rollback 并且抛出了 ActiveRecord::RecordInvalid 错误. 当我查看这个对象的 errors 时, 发现并没有错误, valid? 也返回 true.

最终发现是由于这个 model 的一个 before_create callback 无意中返回了 false 也导致对象保存失败. Rails 官方的 guides描述如下:

The who......