J'ai besoin de supprimer un grand nombre d'enregistrements à la fois et je dois le faire en fonction d'une condition dans un autre modèle qui est liée par une relation "belongs_to". Je sais que je peux faire une boucle à travers chaque vérification de la condition, mais cela prend une éternité avec mon grand ensemble d'enregistrements parce que pour chaque "belongs_to" il fait une requête séparée.Est-il possible de supprimer toutes les conditions de jointure interne?
Voici un exemple. J'ai un modèle "Product" qui "appartient" à un "Artist" et laisse dire que l'artiste a une propriété "is_disabled".
Si je veux supprimer tous les produits qui appartiennent à des artistes handicapés, je voudrais pouvoir faire quelque chose comme:
Product.delete_all(:joins => :artist, :conditions => ["artists.is_disabled = ?", true])
Est-ce possible? Je l'ai fait directement dans SQL avant, mais je ne sais pas si c'est possible de faire des rails.
Comment est-il "à juste titre" pour supprimer les jointures ? Des conditions de jointure sont souvent nécessaires pour limiter les enregistrements à supprimer. Je pense que le pire est qu'il le fait en silence, ce qui pourrait être assez surprenant. –
Je veux juste dire que vous ne pouvez pas faire une jointure supprimer tout comme ça dans SQL de toute façon, d'où le bon. Je suis à peu près sûr que les versions ultérieures de Rails font des sous-requêtes de toute façon. Pas sûr que ce soit la meilleure approche car cela fait apparaître la requête sous-jacente dans une jointure quand c'est vraiment une sous-requête. – gcastro
@gcastro Cela est faux - dans mysql au moins on peut absolument effectuer une suppression avec une déclaration de jointure. http://dev.mysql.com/doc/refman/5.7/fr/delete.html – bluefear