Answers:
在Rails下的创建操作中,在数据库操作之前有六个回调,在之后有两个回调。这些是:
before_validationbefore_validation_on_createafter_validationafter_validation_on_createbefore_savebefore_create
after_createafter_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。