ruby-on-rails - many - rails foreign key
Rails HABTM-Eliminando adecuadamente una asociaciĆ³n (1)
Estoy desarrollando una función para crear ofertas especiales, para un sitio web de compras. Un producto puede tener más de un especial y, obviamente, un especial puede tener más de un producto.
Estoy usando una relación has_and_belongs_to_many
, así que he declarado:
Producto.rb
has_and_belongs_to_many :specials
Especial.rb
has_and belongs_to_many :products
Ahora, con un producto @product
y un especial @special
, se crea una asociación así ...
@special.products << @product
Después de hacer esto, se cumple lo siguiente:
@special.products.first == @product
y, lo más importante:
@product.specials.first == @special
Cuando borro la asociación usando este
@special.products.delete(@product)
entonces @product
se elimina de las ofertas especiales, por lo que @special.products.first==nil
, sin embargo, @product
aún contiene @special
, en otras palabras @products.specials.first==@special
¿Hay alguna forma adecuada, además de escribir un método de eliminación, para hacer esto en una sola llamada?
Según la documentación de Rails:
Colección.delete (objeto,…)
Elimina uno o más objetos de la colección al eliminar sus asociaciones de la tabla de unión. Esto no destruye los objetos.
Brillante referencia aquí para ti
Puedes usar:
product = Product.find(x)
special = product.specials.find(y)
product.specials.delete(special)
Esto crea objetos ActiveRecord tanto para el objeto que está intentando eliminar, lo que le da una definición clara a la función