Je développe une fonctionnalité pour créer des offres spéciales, pour un site de shopping. Un produit peut avoir plus d'un spécial, et évidemment un spécial peut avoir plus d'un produit.
J'utilise un has_and_belongs_to_many
relation, j'ai donc déclaré:
Product.rb
has_and_belongs_to_many :specials
Special.rb
has_and belongs_to_many :products
Maintenant, avec un produit @product
et une spéciale @special
, une association est créée comme ça ..
@special.products << @product
Après cela, ce qui suit est vrai:
@special.products.first == @product
et, surtout:
@product.specials.first == @special
Lorsque je supprime l'association en utilisant ce
@special.products.delete(@product)
puis @product
est supprimé des offres spéciales, donc @special.products.first==nil
, pourtant @product
contient toujours@special
, en d'autres termes @products.specials.first==@special
Existe-t-il un moyen approprié, en plus d'écrire une méthode de suppression, de le faire en un seul appel?
collection.delete (objet,…)
Supprime un ou plusieurs objets de la collection en supprimant leurs associations de la table de jointure. Cela ne détruit pas les objets.
Référence brillante ici pour vous
Vous pouvez utiliser:
product = Product.find(x)
special = product.specials.find(y)
product.specials.delete(special)
Cela crée des objets ActiveRecord pour l'objet que vous essayez de supprimer, ce qui donne une définition claire de la fonction
collection.clear
Supprime tous les objets de la collection en supprimant leurs associations de la table de jointure. Cela ne détruit pas les objets.
Dans cet exemple:
product = Product.find(x)
product.specials.clear