3

有没有办法在 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>

任何解决方法的想法?

4

1 回答 1

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

从而为关系设置一个变量而不运行它。

我实际上不确定你想要这两个中的哪一个,但它们都是方便的技巧。

于 2012-04-05T17:53:50.303 回答