SORU
30 AĞUSTOS 2011, Salı


Raylar 3: Nasıl gözlemci olarak after_commit eylemi tanımlamak için? (/update/yok oluştur)

Bir gözlemci var ve after_commit Bir geri arama kayıt olurum. Nasıl oluşturmak veya güncelleme sonra ateş olup olmadığını söyleyebilir miyim? Bir öğe item.destroyed? #new_record? madde kaydedilmiş beri çalışmıyor sorarak tahrip olduğunu söyleyebilirim.

Gelecektim çözmek ekleyerek after_create/after_update ve bir şey gibi @action = :create iç ve onay @action after_commit, ama öyle görünüyor ki gözlemci örnek bir singleton ve ben belki sadece geçersiz bir değer önce çıkamaz after_commit. Çirkin bir şekilde, bir harita öğesi dayalı eylem saklamak çözdüm.after_create/güncelleme ve after_commit üzerinde değerini kontrol numarası. Gerçekten çirkin.

Başka bir yolu var mı?

Güncelleme

@Tardate dedi, transaction_include_action? özel bir yöntem olsa da iyi bir göstergesidir, ve bir gözlemci olarak #send ile erişilebilir olmalıdır.

class ProductScoreObserver < ActiveRecord::Observer
  observe :product

  def after_commit(product)
    if product.send(:transaction_include_action?, :destroy)
      ...

Ne yazık ki, :on seçeneği gözlemciler çalışmıyor.

Sadece gözlemcilerin cehennem (eğer use_transactional_fixtures kullanıyorsanız test_after_commit gem bak) test emin olun yeni Raylar için sürüm yükseltirken Eğer hala çalışıyorsa anlarsın.

(3.2.9 üzerinde test)

Güncelleme 2

Ben şimdi ActiveSupport kullanın Gözlemciler yerine:: after_commit :blah, on: :create Endişe çalışır.

CEVAP
27 NİSAN 2012, Cuma


Böyle bir şey yapabilirsin, Bunu bugün öğrendim:

after_commit :do_something, :on => :create

after_commit :do_something, :on => :update

Nerededo_somethinggeri arama yöntemi olduğu bazı eylemler üzerinde aramak istediğiniz.

Aynı geri aramak istiyorsanızgüncellemeveoluşturunama değilyokde kullanabilirsiniz: after_commit :do_something, :if => :persisted?

Çok iyi belgelenmiş değil ve zor bir zaman Googling yaptım. Neyse ki, birkaç harika insanlar biliyorum. Umarım bu yardımcı olur!

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Amena

    Amena

    15 Kasım 2006
  • Matt Davis

    Matt Davis

    4 ŞUBAT 2006
  • Sali Kaceli

    Sali Kaceli

    24 ŞUBAT 2009