我们的应用程序接收来自各种提要的数据。
一个提要以数据库的形式提供给我们。因此,我们让这个数据库与我们的应用程序数据库位于同一个 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
如何将我的类定义分离到它们自己的文件中,并将它们包含/需要/无论它们放入单独的模块(或类)中,以便我可以随意访问任一数据库?
让我知道是否有任何不清楚的地方。
谢谢。