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?
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:
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_validationbefore_validation_on_createafter_validationafter_validation_on_createbefore_savebefore_create
after_createafter_saveGü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.
after_saveVeya kullanılırken yeni oluşturulan kayda nasıl atıf yaparsınız after_create?
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.
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 .
before_save3. ve before_create5. listeleri listeliyor .
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)
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_createveafter_validation_on_createRaylar 3 olarak uzaklaştırılır yerine kullanarak,before_validationveafter_validationseçenek ise:on => :create.