Necesito eliminar muchos registros a la vez y necesito hacerlo en base a una condición en otro modelo que está relacionado por una relación "belongs_to". Sé que puedo recorrer cada comprobación de la condición, pero esto lleva una eternidad con mi gran conjunto de registros porque para cada "belongs_to" hace una consulta por separado.¿Es posible eliminar_todos con condiciones de unión interna?
Aquí hay un ejemplo. Tengo un modelo de "Producto" que "pertenece_ a" un "Artista" y digamos que el artista tiene una propiedad "is_disabled".
Si quiero borrar todos los productos que pertenecen a artistas con discapacidad, me gustaría ser capaz de hacer algo como:
Product.delete_all(:joins => :artist, :conditions => ["artists.is_disabled = ?", true])
Es esto posible? He hecho esto directamente en SQL anteriormente, pero no estoy seguro de si es posible hacerlo a través de los rieles.
¿Cómo es que "con razón" para eliminar las uniones ? Las condiciones de unión a menudo se necesitan para limitar los registros que se eliminarán. Creo que la peor parte es que lo hace en silencio, lo que podría ser bastante sorprendente. –
Solo quiero decir que no puedes hacer un join borrar todo eso en SQL de todos modos, por lo tanto, con razón. Estoy bastante seguro de que las versiones posteriores de Rails hacen subconsultas de todos modos. No estoy seguro de que sea el mejor enfoque, ya que hace que parezca la consulta subyacente en una combinación cuando en realidad es una sub consulta. – gcastro
@gcastro Eso es falso: en mysql, al menos uno puede realizar una eliminación con una instrucción de combinación. http://dev.mysql.com/doc/refman/5.7/en/delete.html – bluefear