Ruby on Rails Callback arasındaki fark nedir: before_save ve: before_create?


184

Eğer ayrıntılı olarak açıklayabilir misiniz neyi :before_saveve :before_createYakut geri aramalar vardır Raylar, ve ne Raylar doğrulamaları ile ne ilgisi var üzerinde? Doğrulama :before_saveveya sonrasında gerçekleşir :before_createmi?

Yanıtlar:


363

Rails altında bir oluşturma işleminde, veritabanı işleminden önce altı ve sonra iki geri çağrı vardır. Sırayla, bunlar:

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

    VERİTABANI EKLE
  7. after_create
  8. after_save

Güncelleme işlemleri update, createher yerde (ve INSERT yerine UPDATE) yerine okuma dışında tamamen aynı kümeye sahiptir .

Bundan, doğrulamanın before_saveve before_creategeri aramalardan önce yapıldığını görebilirsiniz .

before_saveÖnce biraz oluşur before_create. Bildiğim kadarıyla aralarında hiçbir şey olmuyor; ancak before_saveGüncelleme işlemlerinde de tetiklenirken before_create, yalnızca Oluşturmalarda tetiklenir.


27
before_validation_on_createve after_validation_on_createRaylar 3 olarak uzaklaştırılır yerine kullanarak, before_validationve after_validationseçenek ise :on => :create.
Paz

after_saveVeya kullanılırken yeni oluşturulan kayda nasıl atıf yaparsınız after_create?
bcackerman

@bcackerman - after_saveveya after_creategeri çağrısında self, kaydetmeden sonra var olduğu için yeni kaydedilen kayıttır. İçeren otomatik olarak oluşturulan alanlar gibi bu id, created_at, updated_at.
Chowlett

Ayrıca unutmayın before_create, createçağrılan gerçek yöntemi değil veritabanına kaydedilen yeni bir nesneyi ifade eder . Böylece, before_createyine de saveyöntemden ateş edilebilir .
Steve

1
@Rads - er, hayır? Dokümanlar hâlâ before_save3. ve before_create5. listeleri listeliyor .
Chowlett

136

before_savebir nesne her kaydedildiğinde çağrılır. Yeni ve mevcut nesneler için. (eylem oluştur ve güncelle)

before_createsadece yaratmadan önce. Yani sadece yeni nesneler için (eylem oluştur)


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.