Eğer ayrıntılı olarak açıklayabilir misiniz neyi :before_save
ve :before_create
Yakut geri aramalar vardır Raylar, ve ne Raylar doğrulamaları ile ne ilgisi var üzerinde? Doğrulama :before_save
veya sonrasında gerçekleşir :before_create
mi?
Eğer ayrıntılı olarak açıklayabilir misiniz neyi :before_save
ve :before_create
Yakut geri aramalar vardır Raylar, ve ne Raylar doğrulamaları ile ne ilgisi var üzerinde? Doğrulama :before_save
veya sonrasında gerçekleşir :before_create
mi?
Yanıtlar:
Rails altında bir oluşturma işleminde, veritabanı işleminden önce altı ve sonra iki geri çağrı vardır. Sırayla, bunlar:
before_validation
before_validation_on_create
after_validation
after_validation_on_create
before_save
before_create
after_create
after_save
Güncelleme işlemleri update
, create
her yerde (ve INSERT yerine UPDATE) yerine okuma dışında tamamen aynı kümeye sahiptir .
Bundan, doğrulamanın before_save
ve before_create
geri 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_save
Güncelleme işlemlerinde de tetiklenirken before_create
, yalnızca Oluşturmalarda tetiklenir.
after_save
Veya kullanılırken yeni oluşturulan kayda nasıl atıf yaparsınız after_create
?
after_save
veya after_create
geri ç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
.
before_create
, create
çağrılan gerçek yöntemi değil veritabanına kaydedilen yeni bir nesneyi ifade eder . Böylece, before_create
yine de save
yöntemden ateş edilebilir .
before_save
3. ve before_create
5. listeleri listeliyor .
before_save
bir nesne her kaydedildiğinde çağrılır. Yeni ve mevcut nesneler için. (eylem oluştur ve güncelle)
before_create
sadece yaratmadan önce. Yani sadece yeni nesneler için (eylem oluştur)
before_create
vs before_save :on => :create
Bazen geri aramaların sırasına dikkat etmelisiniz
Daha fazla ayrıntı için buraya bakın:
http://pivotallabs.com/activerecord-callbacks-autosave-before-this-and-that-etc/
before_save :on => :create
çalışmıyor (en azından raylarda 3.2)
before_save :generate_api_key, :if => :new_record?
before_validation_on_create
veafter_validation_on_create
Raylar 3 olarak uzaklaştırılır yerine kullanarak,before_validation
veafter_validation
seçenek ise:on => :create
.