私はマスターをオフロードするために、いくつかのreadonly呼び出しを送るレプリカデータベーススレーブを実行しています。この理由から、私はいくつかのクエリをオフロードする必要があるときはいつでも、それらを使用できるように、そのデータベースに別々に接続する2つのカスタムモデルを作成したいと思います。Railsはクラス間のカスタムデータベース接続を共有します - クラス継承なし?
私は2つのクラスがあります。
class Car < ActiveRecord::Base
has_many :prices
end
class Price < ActiveRecord::Base
belongs_to :car
end
Railsは、このようなモデルレベルのカスタムデータベース接続を共有する可能性があります。
class MyCustomDbConnection < ActiveRecord::Base
self.abstract_class = true
establish_connection({database: 'www.slavedb.com', port: 5432, pass: 'some'})
end
class ReadonlyCar < MyCustomDbConnection
end
class ReadonlyPrice < MyCustomDbConnection
end
これはうまく動作しますが、私のユースケースは、私はだろうということですまた、'ReadonlyCar 'とReadonlyPrice
は、デフォルトのActiveRecord::Base.connection
を使用する元のモデルから継承したいと思っています。これは、ReadonlyCar
が元のものと全く同じように動作するために必要ですCar
(ビジネスロジック)。今度はReadonlyCar < MyCustomDbConnection
とReadonlyCar < Car
の両方からクラス継承を同時に行うことはできません。Car
から完全な機能を得るにはどうすればいいですか?ReadonlyCar
とReadonlyPrice
の間でスレーブと同じ接続を共有しますか?
グレート、私はそれが実際に同じ接続を使用して、そしてちょうど新しい接続を作成していないことを、私がしなければ 'ReadonlyCar.first?'と 'ReadonlyPrice.first'ことを、確認することができますどのように任意のアイデア? –
含まれているフックは、モジュールがどこかに含まれるたびに実行されます。あなたのケースでは 'establish_connection'は' base'が 'ReadonlyPrice'で、' base'が 'ReadonlyCar'で一度呼び出されます。あなたはちょうど1つの接続をしたいですか?もしそうなら、シングルトンを使う必要があります。これがあなたが実際に達成したかったものなら、私は自分の答えを広げることができます。 – kaikuchn
ええ、アイデアは、私が接続したいと思っていないということです。 'ReadonlyCar.first.prices.first.car' –