2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Railsで生SQLを書く際にヒアドキュメントを使う

Posted at

問題

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)
2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?