私たちのアプリは、さまざまなフィードからデータを受け取ります。
1つのフィードがデータベースの形式で提供されます。したがって、このデータベースは、アプリデータベースと同じMySQLサーバーインスタンスに存在します。このフィードデータベースへのさらなる更新はデルタとして提供され、完全なフィードデータベースに処理する必要があります。
ので、私は持っています:
- app_db
- feed_db
- feed_delta_db
feed_db
同じ構造(テーブル、feed_delta_db
列など)です。
アクセスする必要がfeed_db
ある場合と、にアクセスする必要がある場合がありますfeed_delta_db
。
feed_db
デルタの受信を開始する前に、次のようにアクセスしました。
module Feed
module Db
module InstanceMethods
def something
puts 'pffffft'
end
end
def self.included(receiver)
receiver.send :include, InstanceMethods
receiver.instance_eval {
establish_connection(
{
:adapter => "mysql2",
:database => "feed_db",
:username => "mysql_user",
:password => nil,
:host => "localhost"
}
)
}
end
end
class FeedModel < ActiveRecord::Base
include Db
self.abstract_class = true
end
class Sometable < FeedModel
set_table_name "sometable"
belongs_to :someothertable, :foreign_key => "SomeothertableID", :primary_key => "id"
def name
"#{field1} #{field2}"
end
end
end
これで、このすべてのコードをに複製できますfeed_delta_db
。変更する必要があるのは、接続の詳細で指定されたデータベースだけです。
でもそれはDRYじゃないですよね?
結果は私が望むものになるでしょう。Feed::Sometable
次のように、別々のデータベースのテーブルにアクセスできます。
FeedDelta::Sometable
クラス定義を独自のファイルに分離し、それらを個別のモジュール(またはクラス)に含める/要求する/何でもして、どちらのデータベースにも自由にアクセスできるようにするにはどうすればよいですか?
不明な点がありましたらお知らせください。
ありがとう。