【问题标题】:Rails 3.2 multiple database connections with same model nameRails 3.2具有相同模型名称的多个数据库连接
【发布时间】: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 &lt; 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


【解决方案1】:

我找到了答案,很简单:

class OtherTitle < Other
  self.table_name='titles'
end

此处引用:

Efficient way to pull data from second database?

这里:

Cannot connect to two postgres databases in rails 3.2.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-21
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 2013-12-27
    • 2017-07-12
    相关资源
    最近更新 更多