/ / Wie Ruby Datamapper verschiedene Datenspeicher in derselben App verwenden kann - Ruby, Sinatra, Datamapper, Ruby-Datamapper

Wie Ruby Datamapper kann verschiedene Datenspeicher in der gleichen App verwenden - Ruby, Sinatra, Datamapper, Ruby-Datamapper

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 № 1

Ich 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.