before_create导致ActiveRecord::RecordNotSaved

二 8th, 2012

以前对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

>>原创文章,欢迎转载。转载请注明:转载自Ruby迷,谢谢!
>>原文链接地址:before_create导致ActiveRecord::RecordNotSaved
  1. PikachuEXE
    二 8th, 201214:13

    我是用default_value_for gem的

    • 老宋
      二 8th, 201221:08

      复杂一点的我会找个或自己写个gem,几行代码能搞定的就不用了

Cancel reply