Rails:使用set_table_name连接同一个mysql服务器上的不同数据库

时间:2010-04-07 20:45:10

标签: mysql ruby-on-rails

由于遗留原因,我的模型表存储在同一MySQL服务器上的两个不同数据库中。起初我只使用establish_connection来指定使用它的模型上的第二个数据库。但是,当我在不同数据库中的两个模型之间建立has_many :through连接时,它会爆炸,因为MySQL无法跨两个不同的服务器加入。然后我在互联网上注意到我可以使用set_table_name 'other_database.foos'而不是establish_connection

这大部分都有效,但table_exists?总是返回false,即使表存在,并且我正在使用的一些插件广泛使用该函数。

这是table_exists?中的错误,还是我误导set_table_name?还有另一种方法可以做我想做的事吗?

1 个答案:

答案 0 :(得分:1)

table_exists?执行以下操作:

def table_exists?(table_name)
  tables.include?(table_name.to_s)
end

其中tables是已建立连接的表名数组(在databases.yml中定义)。因此,如果您拨打table_exists?('database.table_name')table_exists?('table_name_from_second_database'),则会始终返回false。

解决这个问题的唯一方法是使用补丁table_exists?或加载tables数组的函数。请参阅api docs以查看从修补开始的位置。

祝你好运!