Muto Masayuki Archive Tags

Sequel::Modelを使うときはautoloadする

20 December 2013

最近Sequelを使いはじめて、ハマったことについて。

Sequel::Modelを使うと、ARパターンを実現できるので、やってみたいなーと思って、こういうコードを書く。

ヤッターモデルの定義ができたよー。さて、アプリケーションクラスからこれを使おうっと。

さてさて実行……

!!突然の死!!

ググるとこんなのが出てくる。

By design, Sequel requires the database connection be set up before model class definition, since it parses the database schema on model class creation. So you should set up your initialization code to connect to the database first.

Sinatra::Modelが設計上の選択としてコネクションを必要とするというのは理由の説明ではあるが、requireしたいんだけど、という質問の答えにはなっていない。問題なのは、requireされたコードがその場で実行されるということなので、解決策としては、requireを遅延させてやることである。かといって、例えばsinatraのconfigureブロックの中でrequireを行うなんてバカなことはやりたくない。

結論としてはautoloadを使う。これで、ファイル管理上の問題を解決できる。

Fork me on GitHub