【发布时间】:2023-03-22 11:15:01
【问题描述】:
关于在rails中创建多个数据库的多个连接有很多问题和答案:
https://stackoverflow.com/a/7480330/2120023
https://stackoverflow.com/a/6305540/2120023
stackoverflow 外部示例:http://ilikestuffblog.com/2012/09/21/establishing-a-connection-to-a-non-default-database-in-rails-3-2-2/
但我还没有找到在使用同时出现在两个数据库中的模型时有效的解决方案。
如果我的默认 db 有一个表 titles 并且我的 Other db 有一个表 titles 我如何访问其他数据库的 Title 模型?
title.rb:
class Title < ActiveRecord::Base
end
othertitle.rb:
class Other < ActiveRecord::Base
self.abstract_class = true
establish_connection "other_#{Rails.env}"
end
class OtherTitle < Other
end
我不能使用上面的,因为我得到了这个错误(编辑:为了清楚起见,两个数据库中都没有other_titles 表只有一个titles 表-> 编辑2:如果我确实创建了一个other_titles 表在Other 数据库中,一切正常,但这无助于我访问titles 表。):
ActiveRecord::StatementInvalid: Mysql2::Error: Table 'other.other_titles' doesn't exist: SHOW FULL FIELDS FROM `other_titles`
我也无法使用class Title < Other,因为我收到了TypeError: superclass mismatch for class Title 错误。
database.yml
development:
adapter: mysql2
encoding: utf8
database: db_dev
pool: 5
username: xxxx
password: xxxx
socket: /var/lib/mysql/mysql.sock
production:
adapter: mysql2
encoding: utf8
database: db
pool: 5
username: xxxx
password: xxxx
socket: /var/lib/mysql/mysql.sock
other_development:
adapter: mysql2
encoding: utf8
database: other_dev
pool: 5
username: xxxx
password: xxxx
socket: /var/lib/mysql/mysql.sock
other_production:
adapter: mysql2
encoding: utf8
database: other
pool: 5
username: xxxx
password: xxxx
socket: /var/lib/mysql/mysql.sock
【问题讨论】:
-
您是否在您的 database.yml 文件中为 nasa_#{dev} 创建了适当的数据库连接配置?
-
是的,但从技术上讲,该示例应该有
other_而不是nasa_我将对其进行编辑以显示正确的代码。 -
请发布您的 database.yml 文件。
-
@Kaldybaev 按要求添加了
database.yml。 -
根据您的数据库文件,您有四个环境,每个环境可以使用相同或不同的数据库。是什么造成了问题,或者可能是我没有正确理解它。你检查过这个apidock.com/rails/ActiveRecord/Base/establish_connection/class
标签: ruby-on-rails database ruby-on-rails-3 multiple-databases