rails(4.0.3)で複数のDBを使う際の設定メモ。
やり方としては、active_recordを使う際に毎回呼び出されているestablish_connectionをmodel側で設定してあげれば良い。
一応このような感じでできる。
hoge.rb
class Hoge < ActiveRecord::Base
establish_connection(
adapter: "mysql2",
...
)
self.abstract_class = true
self.table_name = "table名"
self.primary_key = "プライマリーキー"
end
self.abstract_class = true を書いとけば継承ベース用のモデルだと認識してくれる。
(※上記の設定をしていれば、table_nameは不必要だという記事もあったが、自分の場合は設定しておかないとエラーになった。。。)
これだと、別DBを使う度にmodelに書かないといけないので、DRYじゃない。。。
なのでdatabase.ymlに設定した方が良さそう。
config/database.yml
hoge_db:
adapter: mysql2
encoding: utf8
database: 'DB名'
host: 'ホスト'
username: 'ユーザ名'
password: 'パスワード'
socket: /tmp/mysql.sock
hoge.rb
class Hoge < ActiveRecord::Base
establish_connection :hoge_db
self.abstract_class = true
self.table_name = "table名"
self.primary_key = "プライマリーキー"
end
これの方がすっきりして良い。
ちなみに継承させればサブクラスでもDBの設定は引き継がれるみたい。
fuga.rb
calss Fuga < Hoge
end
コンソールで確認できたので、大丈夫そう!