2010-05-10 5 views
1

J'ai le modèle A et le modèle Attach. J'édite mon formulaire A avec des attributs imbriqués pour: attaches. Et quand je supprime toutes les attaches de A via accept_nested_attributes_for comment puis-je obtenir after_update/after_save callbacks pour tous mes modèles imbriqués? Le problème est que lorsque j'exécute des rappels dans le modèle A, ils sont exécutés juste APRÈS que le modèle A soit mis à jour et que le modèle AVANT soit mis à jour, je ne peux pas, par exemple, savoir s'il n'y a AUCUN attachement après les avoir tous supprimés :) .has_many association, modèles imbriqués et rappels

Regardez par exemple: mon rappel after_save :update_status ne fonctionnera pas correctement après avoir supprimé tous mes attaches.

model A 
    after_save :update_status 
    has_many :attaches 
    accepts_nested_attributes_for :attaches, :reject_if => proc { |attributes| attributes['file'].blank? }, :allow_destroy => true 

    def update_status 
    print "\n\nOUPS! bag is empty!\n\n" if self.attaches.empty? 
    end 
end 

model Attach 
    belongs_to A 
end 

J'utilise des rails 3 beta

Répondre

0

Ok, je l'ai enlevé after_save rappel de A à modèle imbriqué Attach (after_destroy de rappel)

model A 
    has_many :attaches 
    accepts_nested_attributes_for :attaches, :reject_if => proc { |attributes| attributes['file'].blank? }, :allow_destroy => true 
end 

model Attach 
    after_destroy :update_status 
    belongs_to :a 

    def update_status 
    print "\n\nOUPS! bag is empty!\n\n" if self.a.attaches.empty? 
    end 
end 
2

De rubyonrails.org:

IMPORTANT: Pour héritage à travailler pour les files d'attente de rappel, vous devez spécifier les callbacks avant préciser les associations. Sinon, vous pouvez déclencher le chargement d'un enfant avant que le parent ait enregistré les rappels et que ne soit pas hérité.

N'est-ce pas votre problème? Vous spécifiez l'association avant le rappel.

+0

bonne note, mais mon vrai callbacks de modèle sont spécifiées avant que le code – fl00r

Questions connexes