2012-05-15 20 views
20

Bir proje modeliyle has_many aracılığıyla ilişkili bir Görev modelim var ve ilişkilendirmeden önce ekleme/ekleme işleminden önce verileri işlemek gerekiyor.İlişkilendirme yoluyla has_many'de geri aramalar nasıl kullanılır?

"Automatic deletion of join models is direct, no destroy callbacks are triggered." den beri bunun için geri arama kullanamazsınız.

Görev içinde Görev kaydedildikten sonra Proje için bir değer hesaplamak için tüm project_id öğelerine ihtiyacım var. İlişkilendirme yoluyla has_many'yi silmek için silme işlemini silebilir veya silebilir miyim? Bu sorun için en iyi uygulama nedir? i associations callbacksbefore_add, after_add, before_remove veya after_remove

class Task 
    has_many :project_tasks 
    has_many :projects, :through => :project_tasks, 
         :before_remove => :my_before_remove, 
         :after_remove => :my_after_remove 
    protected 

    def my_before_remove(obj) 
    ... 
    end 

    def my_after_remove(obj) 
    ... 
    end 
end 

cevap

45

Bu benim modelde

ne yaptığını görünüyor: içinde

class Body < ActiveRecord::Base 
    has_many :hands, dependent: destroy 
    has_many :fingers, through: :hands, after_remove: :touch_self 
end 

benim Lib klasörü:

module ActiveRecord 
    class Base 
    private 
    def touch_self(obj) 
     obj.touch && self.touch 
    end 
    end 
end 
1

kullanmak zorunda gibi

class Task 
    has_many :project_tasks 
    has_many :projects, :through => :project_tasks 

class ProjectTask 
    belongs_to :project 
    belongs_to :task 

class Project 
    has_many :project_tasks 
    has_many :tasks, :through => :project_tasks 
İlgili konular