2007-11-03
[Rails][プラポケ]MySQL→SQLite3(解決編)
MySQLのインストールがうまくいかないのは、HDDが一杯だからだったorz。
MySQLを入れてSQLite版と比べたら、 SQLiteでうまく動かない原因もわかった。
models.find(:first, :conditions => "flag = 0")
flagはboolean型。上記の書き方はMySQLに依存している。 SQLiteだとfalseは"f"として登録されるらしい。 アホなバグ。十数か所を修正。 たぶん正しい書き方がわからなくて痛い目を見るのを覚悟で書いたコードだと思う。
次のような書き方が正しい。
models.find(:first, :conditions => ["flag = ?", false])
この調査と修正、確認作業で2時間を失う。 自業自得でくだらなくてやや腹が立つ。
もうひとつ問題があった。 あとmigrationで次のように書いたときに、
t.column "flag", :boolean, :default => true
MySQLだとflagに1が入るけど、SQLite3だと"f"が入る。 つまりSQLite3だとcreateしたときにfalseになる(バージョンは1.1.6)。 とりあえずモデルに以下を追加しおいた。
before_create {|e| e.flag = true }
これでSQLite3でも動くようになったぽい。 もしかしたら他にもなんか違いが出てるかもしれないけど。