Rails - Comment éviter la suppression de tous les enfants enregistrements d'un parent
-
27-10-2019 - |
Question
Listing < AR
has_many :images
accepts_nested_attributes_for :images, :allow_destroy => true
validate :validate_image_count
def validate_image_count
errors.add_to_base("too few") if images.length < 1
end
end
Image < AR
belongs_to :listing
end
Dans ma forme # edit Liste J'utilise fields_for pour fournir des champs pour toutes les images avec des cases à cocher à des images de suppression. Cela fonctionne très bien. Je veux procéder aux vérifications de telle sorte qu'une liste est valable que si elle avait au moins une image et au plus 6.
Dans ma configuration actuelle, je peux aller à éditer et supprimer toutes les images, puis mettre à jour la liste.
Je l'ai essayé d'utiliser une validation comme indiqué ci-dessus mais c'est pas appelé. Peut-être que le travail nested_attributes la voie dans des rails. Quelle est la meilleure façon d'appliquer cette vérification?
La solution
que les images ne seront pas supprimés lorsque vous appelez la méthode de validation il retourne vrai sur la longueur de l'image. Vous pouvez utiliser marked_for_destruction?
def validate_image_count
errors.add_to_base("too few") self.images.any? { |i| i.marked_for_destruction? }
end