Sequelのカラム名にはシンボルを使うこと
http://sequel.rubyforge.org/rdoc/files/README_rdoc.html
Column references in Sequel
Sequel expects column names to be specified using symbols.
はまったのでメモ。
条件に沿って"field1", "field2"のようなフィールドにアクセスするときに
間違ってもStringでSequelのwhereとかselectとかに渡してはいけない。
そのまま「文字列」として処理されてしまう。
mysql> select * from foo; +------+------------+-----------------+ | id | field1 | field2 | +------+------------+-----------------+ | 1 | fooooo!!!! | FOOOOOOO!??!?!? | +------+------------+-----------------+ 1 row in set (0.00 sec)
$ sequel mysql2://user:password@localhost/hoge 2.0.0-p247 :001 > puts DB[:foo].select("field1").sql SELECT 'field1' FROM `foo` => nil # ↑field1はバッククオートではなくシングルクオート、つまり文字列! 2.0.0-p247 :002 > puts DB[:foo].select("field1").all {:field1=>"field1"} => nil # ↑得られる結果も当然そのまま! 2.0.0-p247 :003 > puts DB[:foo].select(:field1).sql SELECT `field1` FROM `foo` => nil 2.0.0-p247 :004 > puts DB[:foo].select(:field1).all {:field1=>"fooooo!!!!"} => nil # ↑本当はこうしないといけなかった! 2.0.0-p247 :005 > num = 1 => 1 2.0.0-p247 :006 > puts DB[:foo].select(:"field#{num}").sql SELECT `field1` FROM `foo` => nil 2.0.0-p247 :007 > puts DB[:foo].select(:"field#{num}").all {:field1=>"fooooo!!!!"} => nil # ↑動的に作る場合ももちろんシンボルにすること!