2017-02-15 46 views
0

我想获得上运行转换保存/更新调用轨为sql

.save

生成的SQL,当我在控制台

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不影响原DB

回答

0

您可以从您的终端使用沙盒模式。您所做的任何修改都将在退出时回滚。

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 

Here你可以找到所有阿雷尔经理,像delete_manager.rbselect_manager.rb和其他。

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

+0

谢谢您的回答。但是我试图得到的是'.save'的sql等价物。一个字符串像'INSERT ...'或'UPDATE ....' – aelor

+0

请检查更新的答案,我希望它可以帮助 – Blackcoat77