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

aaa*_*dre 3 activerecord ruby-on-rails ruby-on-rails-3

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

编辑:我希望能够预览破坏性查询而不执行它们:

u = User.first
d = User.open_documents.first
Run Code Online (Sandbox Code Playgroud)

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

u.open_documents.delete(d)
Run Code Online (Sandbox Code Playgroud)

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

u.open_documents.to_sql
Run Code Online (Sandbox Code Playgroud)

但是当被召唤时

u.open_documents.delete(d).to_sql
Run Code Online (Sandbox Code Playgroud)

执行删除(!)并产生错误:

NoMethodError: undefined method `to_sql' for #<Array:0x585e4a8>
Run Code Online (Sandbox Code Playgroud)

当这样调用时,我也得到一个错误:

u.open_documents.first.to_sql
NoMethodError: undefined method `to_sql' for #<Array:0x585e4a8>
Run Code Online (Sandbox Code Playgroud)

任何解决方法的想法?

MrT*_*rus 8

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

User.where(:id => 4).to_sql
 => "SELECT \"users\".* FROM \"users\"  WHERE \"users\".\"id\" = 4" 
Run Code Online (Sandbox Code Playgroud)

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

relation = User.where(:id => 4); 1
=> 1
Run Code Online (Sandbox Code Playgroud)

因此在不运行它的情况下为关系设置变量.

我不确定你想要做哪两个,但它们都是方便的伎俩.