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

したがって、変数を実行せずにリレーションに設定します。

この 2 つのうちどちらを実行したかったのかはわかりませんが、どちらも便利なトリックです。

于 2012-04-05T17:53:50.303 に答える