【问题标题】:How Ruby Datamapper can use different data storage in same appRuby Datamapper 如何在同一个应用程序中使用不同的数据存储
【发布时间】:2012-10-01 13:50:27
【问题描述】:

我正在使用带有 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_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-reflective。我看过http://datamapper.org/docs/misc.html 但这并没有真正的帮助。任何帮助将不胜感激。

【问题讨论】:

    标签: ruby sinatra datamapper ruby-datamapper


    【解决方案1】:

    我找到了解决办法

    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 文档会在某处提到它。

    【讨论】:

    • 恭喜!考虑将此标记为您的解决方案,以便在搜索中反映出来。
    猜你喜欢
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多