我正在将 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
我的第一个模型文件(xyz_db.rb),对应于xyz表,该表位于默认数据存储:default
class xyz
include DataMapper::Resource
property :id, Serial
property :created_at, DateTime
end
我的第二个模型文件(userlogrecord_db.rb),对应于userlogrecords表,该表位于其他数据存储中:logrecdm
class userlogrecord
include DataMapper::Resource
property :id, Serial
property :content, Text, :required => true
property :created_at, DateTime
property :updated_at, DateTime
end
我的第三个模型文件(abc_db.rb),对应于abc,该表位于其他数据存储中:mydb
class abc
include DataMapper::Resource
is :reflective
reflect
end
当我运行 app.rb 时,第一个模型 (xyz_db.rb) 默认使用默认数据存储。但对于第二个和第三个模型,我希望它们应该分别在 :logrecdm 和 :mydb 数据存储中生成。为了实现这一目标,我应该在第二个和第三个模型中进行哪些更改?在第三个数据存储(:mydb)中,我使用 dm-reflect。我看过http://datamapper.org/docs/misc.html但这并没有真正的帮助。任何帮助将不胜感激。
最佳答案
我找到了解决办法
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 文档能在某处提到它。
关于ruby - Ruby Datamapper 如何在同一应用程序中使用不同的数据存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12830396/