messaliberty

hulor と開発チームの最新情報

Posts Tagged ‘activerecord’

[Rails] ActiveRecord で DateTime を使う

10月 21st, 2009 投稿者: ice

ActiveRecord の :datetime は ruby Time class に対応してるんだけど、
ruby の Time class が 0001-01-01 00:00:00 とかの、かなり昔とか未来の日付に対応してない。
(ActiveRecord が 0001-01-01 00:00:00 を 2001:01:01 00:00:00 に変換してしまう)

なので ActiveRecord の :datetime 周りの処理を上書きして、DateTime class を使うようにする。

テスト環境:

  • Ubuntu 9.04
  • ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
  • rails 2.3.2 – 2.3.4
  • mysql Ver 14.12 Distrib 5.0.75, for debian-linux-gnu (i486) using readline 5.2

以下のコード active_record_datetime_ext.rb を RAILS_ROOT/config/initializers にコピーするだけ。
(続きを読む…)

[Ruby] ActiveRecord で複数のデータベースに接続する方法

2月 16th, 2009 投稿者: ice

時々1つのアプリケーションから複数のデータベースにアクセスする必要に迫られることがあります。
たとえば、他のアプリの作ったデータベースにアクセスしたい場合とか。
でも、ActiveRecord のサンプルプログラムのほとんどは、 ActiveRecord::Base に直接設定をセットしているし、
ActiveRecord::Base を使ってコネクションを作成しているので、複数のデータベースの接続を AR をつかって張ることができないです(やりにくい)。
ではどうするか?

ただ、ActiveRecord のサブクラスを作成するだけです。

ActiveRecord::Base のサブクラスは親クラスの読み込んだ設定や、データベースへの接続へアクセスできるので、
まず ActiveRecord::Base のサブクラスを作成して(ここでは BaseDB)これにデータベースの設定をセットします。
それから、 BaseDB を継承した子クラスを作って、その子クラスにそれぞれデータベースへの接続を張らせます。
たぶん、ActiveRecord::Base に直接設定をセットしたり、ActiveRecord::Base で直接データベースへの接続を張るよりも、
子クラスの方でなんとかした方が良さそうです。とくに将来複数のデータベースとかを扱う状況になるかもしれない場合・・・。 (続きを読む…)