[前][次][番号順一覧][スレッド一覧]

rails:395

From: URA Takefumi <hage@p...>
Date: Sun, 2 Oct 2005 07:56:46 +0900 (JST)
Subject: [rails:395] ActiveRecordで複数のデータベースに接続する方法

浦といいます。

ActiveRecordでいろいろ遊んでみています。データベースはPostgreSQLを使って
ます。

ActiveRecordで複数のデータベースに接続する方法がマニュアルに載ってます。

  http://ar.rubyonrails.com/classes/ActiveRecord/Base.html

の「Connection to multiple databases in different models」の記述です。

ここに書かれてるのは以下のような感じでやればいいということです(Barだけ
fooというデータベースに接続したいということです)。

  class Bar < ActiveRecord::Base; end
  Bar.establish_connection(:database => 'foo', ...)

ここでデータベースfooに接続したいものはBarを継承すればいいと書いてありま
す。たとえば、データベースfooにあるテーブルbazesに関するクラスは

  class Baz < Bar; end

と書けばいい訳です。

実際にはBarにはいろいろメソッドを記述したりすることもあるでしょう。なの
で同じデータベースにアクセスするためだけにBarを継承するのは変です(よね? 
こんな風に感じるの私だけかな)。変な上に害もあります。そこでクラスに中間
層(Foo)を設けて、

  class Foo < ActiveRecord::Base; end
  class Bar < Foo; end
  class Baz < Foo; end
  Foo.establish_connection(:database => 'foo', ...)

とやりたいと思いました。が、たとえばBar.find(:all)を実行したら、
ActiveRecordは存在しないテーブルfoosの情報を取ろうとしてエラーになってし
まいます(おそらくfoosのカラムの情報などをここで取りに行ってるのでしょう)。
こんなエラーです;

  ActiveRecord::StatementInvalid: ERROR:  Relation "foos" does not exist

もちろんテーブルfoosを作っておけばいいんですが、使いもしないテーブルを作っ
ておくのは美しくないような気がしています。もうちょっとエレガントな解決法
はないものでしょうか?

--
浦 岳史 (うら たけふみ)
    mailto:hage@p...


--
ML: rails@r...
使い方: http://QuickML.com/
Web Site: http://wiki.fdiary.net/rails/
ML Archives: http://www.fdiary.net/ml/rails/

[前][次][番号順一覧][スレッド一覧]

->     395 2005-10-02 00:56 [hage@p...           ] ActiveRecordで複数のデータベースに接続する方法
       396 2005-10-02 01:32 ┣[drawn.boy@g...      ]                                       
       397 2005-10-02 01:42 ┃┗[drawn.boy@g...      ]                                     
       398 2005-10-02 02:03 ┣[abe@c...            ]                                       
       399 2005-10-02 02:05 ┃┗[abe@c...            ]                                     
       400 2005-10-02 03:24 ┃ ┗[drawn.boy@g...      ]                                   
       402 2005-10-02 18:18 ┃  ┗[hage@p...           ]                                 
       401 2005-10-02 06:29 ┗[yu1@t...            ]                                       
       403 2005-10-02 18:25  ┗[hage@p...           ]