Ruby on Rails回调,有什么区别:before_save和:before_create?

时间:2011-06-06 08:37:21

标签: ruby-on-rails ruby ruby-on-rails-3 validation

你能否详细解释:before_save:before_create Ruby on Rails回调是什么,以及它们与Rails验证有什么关系?验证是在:before_save还是:before_create之后进行的?

3 个答案:

答案 0 :(得分:348)

在Rails下的创建操作中,在数据库操作之前有六个回调,之后有两个回调。按顺序,这些是:

  1. before_validation
  2. before_validation_on_create
  3. after_validation
  4. after_validation_on_create
  5. before_save
  6. before_create

    数据库插入
  7. after_create
  8. after_save
  9. 更新操作具有完全相同的设置,除了在任何地方阅读update而不是create(并且更新而不是 INSERT )。

    通过此,您可以看到验证是在before_savebefore_create回调之前执行的。

    before_save发生在before_create之前。据我所知,他们之间没有任何事情发生;但before_save也会触发更新操作,而before_create只会触发创建。

答案 1 :(得分:128)

每次保存对象时都会调用

before_save。所以对于新的和现有的对象。 (创建和更新操作)

before_create仅在创建之前。所以只适用于新对象(创建动作)

答案 2 :(得分:2)

before_create vs before_save :on => :create

有时你必须小心回调的顺序

<击> 有关详细信息,请参见此处 http://pivotallabs.com/activerecord-callbacks-autosave-before-this-and-that-etc/