問題
RailsでSQLを書きたくなった時、そのまま書いていくと横に長くなっていくため見づらい。、
以下の例程度であれば良いですが、joinが複数発生したりすると大変です。
value1 = 10
value2 = 20
HogeHoge.find_by_sql("SELECT `id`, `value` FROM hogehoge WHERE `id` between #{value1} AND #{value2}"
対策
自分はヒアドキュメントを使い、以下のように書いています。
value1 = 10
value2 = 20
sql =
<<~SQL.squish
SELECT
`id`, `value`
FROM
hogehoge
WHERE
`id` between #{value1} AND #{value2}
SQL
=> "SELECT `id`, `value` FROM hogehoge WHERE `id` between 10 AND 20
<<~
でインデントを付けても先頭のホワイトスペースを除去します。
String#squish
で改行コードやタブを含む、先頭と末尾、連続したホワイトスペースを1つのスペースに変換します。(.squish
をするので<<~
ではなく<<-
でも同様の結果になります。)
SQL ~ SQL
とすることでエディタ上でSQLに対するSyntax Highlightが効くことが多いです。
ログ上では1行で表示され、余計な改行や空白を含まないSQLを見やすく書くことができました。
ちなみに自分はヒアドキュメントを引数に渡す場合、括弧をまたいでヒアドキュメントで書くよりも先に変数に入れてから渡すほうが好きです。
HogeHoge.find_by_sql(<<~SQL.squish)
...
SQL
↓
sql =
<<~SQL.squish
...
SQL
HogeHoge.find_by_sql(sql)