Answers:
在Rails下的创建操作中,在数据库操作之前有六个回调,在之后有两个回调。这些是:
before_validation
before_validation_on_create
after_validation
after_validation_on_create
before_save
before_create
after_create
after_save
更新操作具有完全相同的集合,除了read update
而不是create
各处(和UPDATE而不是INSERT)。
由此可见,验证是在before_save
和before_create
回调之前进行的。
在before_save
之前的略微发生before_create
。据我所知,它们之间什么也没有发生。但before_save
也会在更新操作上触发,而before_create
只会在创建上触发。
after_save
或时,您将如何引用刚刚创建的记录after_create
?
after_save
或after_create
回调self
中的是刚刚保存的记录,因为它在保存之后存在。这包括自动生成的领域,如id
,created_at
,updated_at
。
before_create
是指将新对象保存到数据库中,而不是实际create
调用的方法。因此,before_create
即使从该save
方法仍可以被触发。
before_save
第三和before_create
第五。
before_create
与 before_save :on => :create
有时您必须注意回调的顺序
请参阅此处以获取更多详细信息:http :
//pivotallabs.com/activerecord-callbacks-autosave-before-this-and-that-etc/
before_save :on => :create
不起作用(至少在3.2轨道上)
before_save :generate_api_key, :if => :new_record?
before_validation_on_create
和after_validation_on_create
从Rails 3开始被删除,而是分别使用before_validation
和after_validation
和option:on => :create
。