我正在使用带有datamapper的sinatra,并且有多个数据库,我想连接到它并在我的逻辑中使用它们在同一个应用程序中。
我在文件中定义了datamapper设置,比如app.rb
#Default database
dm = DataMapper.setup :default, {
:adapter => 'mysql',
:path => 'dsfsdf',
:username => 'sdf2r',
:password => '234wer',
:host => 'f3rwefwe'
}
#Logrecord database
lrdm = DataMapper.setup :logrecdm, {
:adapter => 'mysql',
:path => 'dsf34',
:username => 't4h6',
:password => '56erg',
:host => 'g45gfg'
}
#my database
mdb = DataMapper.setup :mydb, {
:adapter => 'mysql',
:path => 'dsf34',
:username => 't4h6',
:password => '56erg',
:host => 'g45gfg'
}
# Here I include all my model files.
DataMapper.finalize
class xyz
include DataMapper::Resource
property :id, Serial
property :created_at, DateTime
end
class userlogrecord
include DataMapper::Resource
property :id, Serial
property :content, Text, :required => true
property :created_at, DateTime
property :updated_at, DateTime
end
class abc
include DataMapper::Resource
is :reflective
reflect
end
当我运行app.rb时,默认情况下,第一个模型(xyz_db.rb)使用默认数据存储。但对于第二和第三个模型,我希望它们应分别在:logrecdm和:mydb数据存储中生成。我应该在第二和第三个模型中做出哪些改变来实现这一目标?在第三个数据存储(:mydb)我使用dm反射。我看过http://datamapper.org/docs/misc.html但这并没有真正帮助。任何帮助将不胜感激。
答案 0 :(得分:3)
我找到了解决方案
class abc
include DataMapper::Resource
def self.default_repository_name
:mydb
end
is :reflective
reflect
end
我从http://workswithruby.com/2008/12/using-datamapper-on-legacy-databases接受了这个想法 我希望datamapper文档会在某处提到它。