在rails控制台中预览activerecord查询?

时间:2012-04-05 17:30:59

标签: ruby-on-rails ruby-on-rails-3 activerecord

有没有办法在Rails控制台中预览查询而不执行它们?

编辑:我希望能够在不执行它们的情况下预览破坏性查询:

u = User.first
d = User.open_documents.first

我想在不执行的情况下预览:

u.open_documents.delete(d)

在表达式末尾添加.to_sql的建议答案适用于

u.open_documents.to_sql

但是当被召唤时

u.open_documents.delete(d).to_sql

执行delete(!)并产生错误:

NoMethodError: undefined method `to_sql' for #<Array:0x585e4a8>

当这样调用时,我也会收到错误:

u.open_documents.first.to_sql
NoMethodError: undefined method `to_sql' for #<Array:0x585e4a8>

有关解决方法的任何想法吗?

1 个答案:

答案 0 :(得分:8)

您可以在ActiveRecord :: Relation上调用.to_sql来查看将要执行的SQL。

User.where(:id => 4).to_sql
 => "SELECT \"users\".* FROM \"users\"  WHERE \"users\".\"id\" = 4" 

此外,控制台只会自动执行关系(并实例化对象),如果它是该行的最后一个命令,那么你可以这样做:

relation = User.where(:id => 4); 1
=> 1

因此将变量设置为关系而不运行它。

我真的不确定你想要做哪两个,但它们都是方便的技巧。