2

私はdatamapperでsinatraを使用しており、複数のデータベースに接続して同じアプリのロジックごとに使用したいと考えています。

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 テーブルに対応する最初のモデル ファイル (xyz_db.rb) で、このテーブルはデフォルトのデータ ストア :default にあります。

    class xyz  
      include DataMapper::Resource  
      property :id, Serial
      property :created_at, DateTime  
    end

2 番目のモデル ファイル (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  

私の3番目のモデルファイル(abc_db.rb)は、abcに対応し、そのテーブルは他のデータストア:mydbにあります

class abc
  include DataMapper::Resource
  is :reflective
  reflect 
end

app.rb を実行すると、最初のモデル (xyz_db.rb) はデフォルトでデフォルトのデータストアを使用します。しかし、2 番目と 3 番目のモデルについては、それぞれ :logrecdm と :mydb データ ストアに生成する必要があります。これを実現するには、2 番目と 3 番目のモデルにどのような変更を加える必要がありますか? 3 番目のデータ ストア (:mydb) では、dm-reflective を使用しています。http://datamapper.org/docs/misc.htmlを見てきましたが、実際には役に立ちません。どんな助けでも大歓迎です。

4

1 に答える 1

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 のドキュメントがどこかでそれについて言及していたらよかったのにと思います。

于 2012-10-11T01:11:21.410 に答える