由于遗留原因,我的模型表存储在同一MySQL服务器上的两个不同数据库中。起初我只使用establish_connection
来指定使用它的模型上的第二个数据库。但是,当我在不同数据库中的两个模型之间建立has_many :through
连接时,它会爆炸,因为MySQL无法跨两个不同的服务器加入。然后我在互联网上注意到我可以使用set_table_name 'other_database.foos'
而不是establish_connection
。
这大部分都有效,但table_exists?
总是返回false,即使表存在,并且我正在使用的一些插件广泛使用该函数。
这是table_exists?
中的错误,还是我误导set_table_name
?还有另一种方法可以做我想做的事吗?
答案 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以查看从修补开始的位置。
祝你好运!