2012-05-15 9 views
20

Mam model zadania skojarzony z modelem projektu poprzez has_many i trzeba manipulować danymi przed usunięciem/wstawieniem za pośrednictwem powiązania.Jak korzystać z callbacków w has_many przez asocjację?

Od "Automatic deletion of join models is direct, no destroy callbacks are triggered." nie mogę używać wywołań zwrotnych.

W zadaniu i potrzebuję wszystkich project_ids do obliczenia wartości dla projektu po zapisaniu zadania. Jak mogę wyłączyć usuwanie lub zmienić delete to destroy on has_many poprzez powiązanie? Co to jest najlepsza praktyka dla tego problemu?

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 

Odpowiedz

45

Wydaje się, muszę używać associations callbacksbefore_add, after_add, before_remove lub 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

To co zrobiłem

w modelu

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

w moim Folder Lib:

module ActiveRecord 
    class Base 
    private 
    def touch_self(obj) 
     obj.touch && self.touch 
    end 
    end 
end 
Powiązane problemy