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)
任何解决方法的想法?
您可以在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)
因此在不运行它的情况下为关系设置变量.
我不确定你想要做哪两个,但它们都是方便的伎俩.
归档时间: |
|
查看次数: |
3160 次 |
最近记录: |