RailsでSQLのログを改行無しで出力する「squish」メソッド
こんにちは!kossyです!
今回は、RailsでSQLのログを改行無しで出力する「squish」メソッドについて、ブログに残してみたいと思います。
環境
Ruby 2.6.6
Rails 6.0.3
Docker for Mac
使い方
Employeeモデルにlength_of_serviceというscopeが生えているとします。
scope :length_of_service, -> () { query = <<-SQL SELECT id, last_name, first_name, (COALESCE(retired_at, current_date) - hired_at) / 365 as length_of_service FROM employees ORDER BY id ASC SQL find_by_sql(query) }
実行結果は以下です。
$ Employee.length_of_service Employee Load (27.3ms) SELECT id, last_name, first_name, (COALESCE(retired_at, current_date) - hired_at) / 365 as length_of_service FROM employees ORDER BY id ASC
このscopeにsquishメソッドを用いてみます。
scope :length_of_service, -> () { query = <<-SQL.squish # 追加 SELECT id, last_name, first_name, (COALESCE(retired_at, current_date) - hired_at) / 365 as length_of_service FROM employees ORDER BY id ASC SQL find_by_sql(query) }
$ Employee.length_of_service Employee Load (9.7ms) SELECT id, last_name, first_name, (COALESCE(retired_at, current_date) - hired_at) / 365 as length_of_service FROM employees ORDER BY id ASC
改行が取り除かれて、一行で出力されるようになりました。
処理そのものは、冒頭と末尾のホワイトスペースを除去し連続したホワイトスペースを1つに減らすとのことなので、
SQLの改行を消去する以外でも使い道はありそうです。