through rails many how has_and_belongs_to_many has foreign example create belongs and active ruby-on-rails ruby-on-rails-3 has-and-belongs-to-many

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