DDD ディストーション駆動開発

エレキギターと音楽とRubyを愛するフルテンエンジニアのblog

condition、という名前のカラムでselectできない

Hogeモデルからconditionカラムを取りたくて

Hoge.select(:condition).find_by(id: id)

的なコードを書いたら、なぜかexception出る。おや??

MySQLの予約語だったから、というオチ。そんな名前のカラム名つけちゃダメでしょ。

Hoge.select("`condition`").find_by(id: id)

これでオッケー。エスケープしてやればとりあえず使えます。

こういう命名は避けるに越したことはないのですが、既存で埋まってて、手を出したくない状態になった後で発覚したら、右から左へ受け流すしかないですね。。。

 

今後のためにも、コードチェックの視点として覚えておくようにしないとです。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 9.3 予約語

 

似たような話で、STI使ってないのにtypeカラムを定義するとハマる、という現象もあるそうで。

qiita.com