将保存/更新调用rails转换为sql

我想在运行时生成sql

.save

当我在控制台中运行此命令时

 irb(main):018:0> a = User.last irb(main):018:0> a.first_name => "Mohan" irb(main):019:0> a.first_name = 'Sohan' => "Sohan" irb(main):020:0> a.save (2.0ms) BEGIN SQL (1.4ms) UPDATE `users` SET `first_name` = 'Sohan', `updated_at` = '2017-02-15 14:00:10' WHERE `users`.`id` = 1 (31.3ms) COMMIT => true 

这实际上更新了记录。 我想知道在不更新记录的情况下生成的sql查询。

我尝试使用.to_sql但这似乎只适用于关系。

您可以从终端使用沙盒模式: rails console --sandbox它允许您使用所有方法来玩模型,例如: .create.delete.save.update而不会影响原始数据库。 您所做的任何修改都将在退出时回滚。

UPDATE

您可以通过终端的AREL实现这一目标:

 # Arel::InsertManager table = Arel::Table.new(:users) insert_manager = Arel::InsertManager.new insert_manager.into(table) insert_manager.insert([ [table[:first_name], 'Eddie'] ]) insert_manager.to_sql # Arel::UpdateManager table = Arel::Table.new(:users) update_manager = Arel::UpdateManager.new update_manager.set([[table[:first_name], "Vedder"]]).where(table[:id].eq(1)).table(table) update_manager.to_sql 

在这里,您可以找到所有Arel管理器,例如delete_manager.rbselect_manager.rb和其他。

好读: http : //jpospisil.com/2014/06/16/the-definitive-guide-to-arel-the-sql-manager-for-ruby.html