Ruby ActiveRecord动态模型创建

时间:2012-03-29 06:45:32

标签: ruby activerecord multiple-databases

我正在尝试与ActiveRecord建立多个数据库连接。目前我需要将数据插入到总共2个数据库中。 No.Of数据库有可能增加。

所以我动态创建了2个类,它们将从ActiveRecord::Base

扩展
Object.const_set("Connection1",Class.new(ActiveRecord::Base) do
  self.abstract_class = true
  self.establish_connection({
    :host=>"localhost", :username=>"root", :password=>"root", :database=>"db1", :encoding=>"utf8", :adapter=>"mysql2"})
end)

Object.const_set("Connection2",Class.new(ActiveRecord::Base) do
  self.abstract_class = true
  self.establish_connection({
    :host=>"localhost", :username=>"root", :password=>"root", :database=>"db2", :encoding=>"utf8", :adapter=>"mysql2"})
end)

然后我相应地创建了从每个类扩展的动态模型

Object.const_set("ConnectionUser1",Class.new(Connection1) do
  self.table_name = 'user'
  def self.foo
    all.count
  end
end)

Object.const_set("ConnectionUser2",Class.new(Connection2) do
  self.table_name = 'user'
  def self.foo
    all.count
  end
end)

然后当我试图调用foo方法时

p ConnectionUser1.foo
p ConnectionUser2.foo

它给了我 ActiveRecord :: ConnectionNotEstablished 错误。

我听说如果模型没有连接,ActiveRecord将连接其父级

所以根据这个ConnectionUser1应该使用Connection1和ConnectionUser2的连接使用Connection2的连接。

那么为什么ActiveRecord无法建立连接?

任何帮助将不胜感激 谢谢。

1 个答案:

答案 0 :(得分:1)

请看下面的链接,该链接显示了如何在ActiveRecord中使用多个数据库。

How do i work with two different databases in rails with active records?