2011-01-18 8 views
11

だから私はconfig/database.ymlに外部データベースを追加できるようにしたいと思います。レールを外部データベース呼び出しにする方法は?

これは可能ですか?私はどのように把握することができませんでした。

「異なるモデルで複数のデータベース

接続通常ActiveRecord::Base.establish_connectionを介して作成してActiveRecord::Base.connectionによって取得さへの接続が。ActiveRecord::Baseから継承するクラスはすべて、この接続を使用します。しかし、あなたは、クラス固有の接続をも設定することができます。たとえば、 CourseActiveRecord::Baseですが、別のデータベースに存在する場合は、あなただけCourse.establish_connectionCourseを言うことができるとそのサブクラスのすべてではなく、この接続を使用します。

この機能は、接続を維持することによって実現されていますプールによってActiveRecord::Baseに格納されます。これはクラスによってインデックスされたハッシュです。接続が要求された場合、retrieve_connectionメソッドは接続プール内で接続が検出されるまでクラス階層を上ります。 「

答えて

16

まず、database.ymlの中の接続情報を定義します。モデルを作成し、その後

my_external_db: 
    adapter: mysql 
    username: ... 
    .... 

をして

class MyExternalModel < ActiveRecord::Base 
    establish_connection(:my_external_db) 
    set_table_name 'my_external_table' 
end 
+0

後で接続を閉じる必要がありますか? – Kirby

+1

@Kirby:私はあなたがそれをしたいとは思わない、そうでなければレールは各要求に対して新しい接続を開きます。ここでは、サーバーの起動時に一度だけ実行されます。 – ryeguy

+0

ありがとうございました!自分のレールアプリを外部のデータベースに接続しようとしていました。非常に役立ちます。 – Vicer

2

set_table_name外部DBに接続しますが、あなたは、その代わりに、削除されますself.table_name

関連する問題