Ich verwende Sinatra mit Datamapper und habe mehr als eine Datenbank, mit der ich mich verbinden möchte, und verwende sie gemäß meiner Logik in derselben App.
Ich habe meine Datamapper-Einstellungen in einer Datei definiert, sagen wir 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
Meine erste Modelldatei (xyz_db.rb), die der xyz-Tabelle entspricht und sich im Standarddatenspeicher befindet: default
class xyz
include DataMapper::Resource
property :id, Serial
property :created_at, DateTime
end
Meine zweite Modelldatei (userlogrecord_db.rb), die der userlogrecords-Tabelle entspricht und sich in einem anderen Datenspeicher befindet: logrecdm
class userlogrecord
include DataMapper::Resource
property :id, Serial
property :content, Text, :required => true
property :created_at, DateTime
property :updated_at, DateTime
end
Meine dritte Modelldatei (abc_db.rb), die abc entspricht, und diese Tabelle befindet sich in einem anderen Datenspeicher: mydb
class abc
include DataMapper::Resource
is :reflective
reflect
end
Wenn ich meine app.rb ausführe, wird das erste Modell (xyz_db.rb) verwendet standardmäßig den Standarddatenspeicher. Aber für das zweite und dritte Modell möchte ich, dass sie in den Datenspeichern: logrecdm und: mydb generiert werden. Welche Änderungen sollte ich an meinem zweiten und dritten Modell vornehmen, um dies zu erreichen? Im dritten Datenspeicher (: mydb) benutze ich dm-reflective. Ich habe angeschaut http://datamapper.org/docs/misc.html aber das hilft nicht wirklich. Jede Hilfe wird geschätzt.
Antworten:
3 für die Antwort № 1Ich habe die Lösung gefunden
class abc
include DataMapper::Resource
def self.default_repository_name
:mydb
end
is :reflective
reflect
end
Ich habe die Idee übernommen http://workswithruby.com/2008/12/using-datamapper-on-legacy-databases Ich wünschte, Datamapper-Dokumentation hätte darüber irgendwo erwähnt.