有没有办法在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>
有关解决方法的任何想法吗?
答案 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
因此将变量设置为关系而不运行它。
我真的不确定你想要做哪两个,但它们都是方便的技巧。