我們的應用程序接收來自各種提要的數據。Ruby/Rails - 動態指定類的連接屬性
以數據庫的形式向我們提供一種飼料。因此,我們有這個數據庫與我們的應用程序數據庫在同一個MySQL服務器實例中。對此Feed數據庫的進一步更新將作爲增量提供,並且必須處理爲完整的Feed數據庫。
所以,我有:
- 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
,我不得不唯一改變的是在指定的數據庫連接細節。
但這不是乾的,是嗎?
結果將是我想要的。我能夠訪問表中的獨立的數據庫,像這樣: Feed::Sometable
和FeedDelta::Sometable
如何將我的類定義分開自己的文件,包括/需要/不管他們到獨立的模塊(或類)等等我可以隨意訪問任何數據庫?
讓我知道是否有什麼不清楚。
謝謝。
這是否幫我曬我的類定義?例如我仍然必須定義'class Sometable'兩次?一旦從'Feed'繼承,並且一旦從'FeedDelta'繼承, – johnnycakes
您是否將它們視爲單獨的模型(不同的功能和/或責任),還是僅僅試圖管理到不同數據庫的兩個連接?後者是 – Brad
。這些類在功能,關聯,方法,數據庫表結構等方面是相同的(並且應該保持這種方式)。他們只需要連接到兩個不同的數據庫(具有不同的數據集)。 – johnnycakes