before_create导致ActiveRecord::RecordNotSaved
以前对model赋默认值一直是通过修改migration来实现,看了ruby-china的源码后感觉那样写如果迁移数据库时会比较麻烦,还是放到model里合适。于是给项目的model添加了before_create,然后运行rake db:seed时就报“ActiveRecord::RecordNotSaved”异常。
model中添加的代码是这样的
before_create :default_value_for_create def default_value_for_create self.state = STATE[:normal] self.admin = false end
注意default_value_for_create的最后一行,因为ruby会自动返回方法的最后一行做为结果,所以此方法返回false,最终导致save对象时出错,改法也很简单,在方法最后添加一行true即可。
before_create :default_value_for_create def default_value_for_create self.state = STATE[:normal] self.admin = false true end
最后非常感谢qichunren
我是用default_value_for gem的
复杂一点的我会找个或自己写个gem,几行代码能搞定的就不用了