ActiveRecord で実行される sql を確認する

ActiveRecord で実行される sql を確認したい場合、 #to_sql メソッドが利用できます。

# このリレーションでレコードを読み込む場合に実行される SQL を文字列で取得する
p Blog.joins(:articles).where(articles: { name: "hoge" }).to_sql
# => "SELECT \"blogs\".* FROM \"blogs\" INNER JOIN \"articles\" ON \"articles\".\"blog_id\" = \"blogs\".\"id\" WHERE \"articles\".\"name\" = 'hoge'"

また、 puts で出力する場合は "エスケープされないのでより読みやすくなります。

puts Blog.joins(:articles).where(articles: { name: "hoge" }).to_sql
# => SELECT "blogs".* FROM "blogs" INNER JOIN "articles" ON "articles"."blog_id" = "blogs"."id" WHERE "articles"."name" = 'hoge'