2
votes

Puis-je voir ce que SQL un appel ActiveRecord .save générerait, sans effectuer la sauvegarde?

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!


0 commentaires

3 Réponses :


1
votes

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

documentation

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


0 commentaires

-1
votes

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


1 commentaires

Comment en tirer le SQL? Vous devez grep les journaux?



2
votes

@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


0 commentaires