2012-05-15 12 views
20

Ich habe ein Aufgabenmodell über has_many mit einem Projektmodell verbunden und muss die Daten vor dem Löschen/Einfügen über die Assoziation bearbeiten.Wie können Rückrufe in einer has_many durch Assoziation verwendet werden?

Seit "Automatic deletion of join models is direct, no destroy callbacks are triggered." kann ich Callbacks dafür nicht verwenden.

In Aufgabe brauche ich alle project_ids, um einen Wert für Project nach dem Speichern der Aufgabe zu berechnen. Wie kann ich löschen löschen oder löschen löschen, um auf has_many durch Zuordnung zu zerstören? Was ist die beste Vorgehensweise für dieses Problem?

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 

Antwort

45

scheint, wie ich associations callbacks verwenden müssen before_add, after_add, before_remove oder 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 
1

Das ist, was ich tat

im Modell:

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

in meinem Lib-Ordner:

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