Yalnızca bir has_many ile ilgili bir sorunla karşılaştınız: ilişkilendirme ve sonrasında/sonradan yok etme geri aramaları tetiklenmiyor.HMT collection_singular_ids = birleştirme modellerinin silinmesi doğrudan, geri çağırmaların tetiklenmesi yok
Diyelim ki, kullanıcılar, gruplar ve üyelik adı verilen bir ara ilişki var. Kullanıcıların, ilişkili onay kutularını işaretlediklerinde yeni bir üyelik kaydı oluşturarak gruplara kaydolmasına izin veren bir formum var. Temel olarak bir grup group_ids.
böyle bir şey görünüyor:
Which group would you like to join? (check all that apply)
[] Group A
[] Group B
[] Group C
Ve diğer bazı daha az önemli thigns böyle bir grup katılarak veya etkinlik günlüğü tabloya bir ayrılan grup olarak işlemleri kaydedebilir ve bunu istiyoruz.
Ben tanımlanan aşağıdaki adres: beklendiği gibi yeni bir üyelik kayıt after_create oluşturulur
class Group < AR::Base
has_many :memberships
has_many :users, :through => :memberships
end
class Membership < AR::Base
belongs_to :user
belongs_to :group
after_create :log_event_to_audit_table
after_destroy :log_event_to_audit_table
end
class User < ActiveRecord::Base
has_many :memberships
has_many :groups, :through => :memberships
attr_accessible :group_ids # enables mass-assignment
end
çalıştırılır. Ancak, after_destroy tetiklenmez!
google-ing ve ben nedenini keşfetti dokümanlar okumak sonra:
"modellerini katılmak otomatik olarak silme direkt , hiçbir zarar geri aramaları tetiklenir" - Ruby Kılavuzlarımızdan.
Hmmmmmm
...Yani katılmak modeli en (bu durumda Üyelik en) geri aramaları tetiklenir edilmiyor yok. Peki bu bir düşüş. Neden olduğuna dair bir sebep var mı?
Sorularım bu soruna geçici bir çözüm bulmak için en iyi yol nedir? Üyelik hesabımın üyeliğini doğrudan additmek için kendi üyelerim/methodumu tanımlamalı mıyım?
Böyle bir senaryodaki en iyi uygulamalarla ilgili önerilere açık.
Teşekkürler! ,
before_add, after_add, before_remove ve
class User < ActiveRecord::Base
has_many :groups, :through => :memberships, :after_remove => :your_custom_method
end
after_remove aldım kaç tepkiler bakılırsa: dikkatle inceleyen API docs sonra
Bu delilik ... sana çok teşekkürler.Çok uzun zamandır bununla uğraşıyordum. –
Bunu yapmak için Rails yolu gibi görünüyor. Yine de, “grup” un kaldırılmasının ardından tetiklenen eylemin * üyeliğin “üyesi” modelinin bir parçası olması gerektiğini düşünüyorum çünkü bir “grubun” kullanıcı tarafından kaldırılması aslında bir “üyeliğin” kaldırılmasıdır. Çok kötü, Raylar, kirli çözümler olmadan buna izin vermiyor. –