2009-08-28 6 views
2

J'ai un modèle, personne, avec l'association suivante:Comment accéder à ActiveRecord :: AutosaveAssociation.marked_for_destruction? à partir de modèle parent

has_many :distributions 

accepts_nested_attributes_for :distributions, :allow_destroy => true 

validate :distributions_must_total_100 

La validation personnalisée échoue actuellement quand il ne devrait pas - quand certains des validations ont été marquées pour la destruction - parce que ils apparaissent toujours dans l'attribut "distributions" (en mémoire, peu importe ce qu'il y a dans la BD) avant que la personne et ses distributions ne soient sauvegardées.

Je voudrais utiliser ActiveRecord::AutosaveAssociation.marked_for_destruction? dans mon validateur, pour ignorer les distributions qui sont sur le point d'être détruites.

  1. Comment atteindre cette méthode? Vous ne savez pas exactement quelle est la relation entre Distribution (votre modèle Rails normal) et cette classe.

  2. Est-ce un hack horrible et malpropre? Il se sent seulement un peu sale, et c'est la solution la plus précise pour le problème.

j'ai fait pas à travers le code source ActiveRecord dans le débogueur pour confirmer que les enregistrements sont effectivement marqués pour la destruction (à savoir pas Javascript ou sous forme de bug constructeur).

Répondre

0

Il s'avère que vous pouvez simplement appeler marked_for_destruction? sur une instance de Distribution, et cela fonctionne très bien.

Questions connexes