Pour une requête ActiveRecord, je peux voir le SQL généré sans l'exécuter réellement:
SomeModel.where(something: "something").to_sql
Aucune requête n'a été envoyée à la base de données, mais je peux voir le SQL sous forme de chaîne.
Y a-t-il quelque chose de similaire qui peut être fait pour la mise à jour
SQL qui sera générée par some_model.save
?
I pense peut-être pas, je ne peux pas le trouver!
3 Réponses :
Même moi, je n'ai encore vu aucune méthode pour générer SQL pour save
.
J'ai également fait face à une situation plus tôt et j'ai trouvé que nous pouvons utiliser le mode sandbox
de rails console
pour vérifier les requêtes et il sera annulé les modifications apportées dans le session une fois que nous fermons la console.
console de rails - boîte à sable
Si vous souhaitez tester du code sans modifier aucune donnée, vous pouvez le faire en appelant rails console --sandbox.
@Rohan Daxini
a ajouté la raison pour laquelle .to_sql
n'est pas disponible sur save
Sauvegardez dans une transaction avec un rollback à la fin par exemple.
irb(main):024:0> Post.transaction do irb(main):025:1* p=Post.create(user_id: User.first.id, text: '11', group_id: 1) irb(main):026:1> raise ActiveRecord::Rollback irb(main):027:1> end
Comment en tirer le SQL? Vous devez grep les journaux?
@jrochkind, Si nous vérifions l'API pour .save
ici puis il appelle simplement la create_or_update
méthode . Donc, idéalement, de telles méthodes retournant des valeurs booléennes ne généreront pas de requêtes utilisant to_sql
.
De plus, je pense qu'un sujet similaire est traité ici to_sql ne fonctionne pas sur update_attributes ou .save
Et il existe probablement une autre approche telle que remplacer la méthode d'exécution ActiveRecord