コンソールでコマンドを実行する.inspect
と、最後に のようなものが自動的に追加され、コマンドの結果が表示されます。たとえば(これは私が現在取り組んでいる私のアプリにあります):
irb(main):061:0> Job.where(id: 251000)
Job Load (3.8ms) SELECT "jobs".* FROM "jobs" WHERE "jobs"."deleted_at" IS NULL AND "jobs"."id" = 251000
=> [#<Job id: 251000, {...}>]
したがって、コードの最初の行は問題なく、通常はクエリを実行しませんが、コンソールで実行していたため、結果を表示できるようにすぐに実行されます。
これを回避する 1 つの方法は、コマンドの最後に追加; nil
することです。これにより、コンソールは結果を表示しようとしません (その行の結果として nil を表示するだけです。IE:
irb(main):062:0> Job.where(id: 251000); nil
=> nil
このようにすると、期待どおりのことができるはずです (実際に結果が必要になるまでクエリの実行を遅らせます)。
rel = article.where(version: 'some_version')
.joins(:categories)
.merge(Category.where(:uuid => 'some_cat_uuid')); nil
articles = rel.where(published: true).limit(10); nil
articles.all
次に、 (Rails 3の場合)またはarticles.to_a
(Rails 4の場合)を使用してクエリを実行できます
もちろん、このコードをレーキ タスクやモデルなどに移動する場合は、それらの; nil
ビットを削除できます。
コンソールのもう 1 つの論点は、その時点でそれを確認し.where() {NEWLINE}
てクエリを実行することです。コマンドが終了する場所のあいまいさを取り除くために、前の行にドットを配置する傾向があります。
rel = article.where(version: 'some_version').
joins(:categories).
merge(Category.where(:uuid => 'some_cat_uuid')); nil