【问题标题】:Rails and Existing Postgres DatabaseRails 和现有的 Postgres 数据库
【发布时间】:2021-04-07 23:34:36
【问题描述】:

如果您想构建使用现有数据库的 Rails 项目,最佳实践是什么?

在我的例子中,位于远程机器上的 postgres 数据库运行一个带有 postgres 的 docker 实例,它有一个带有表 stake_address 的数据库。

现在我在 Rail 中创建了一个模型:

class StakeAddress < ApplicationRecord
end

rails console:

2.6.1 :001 > StakeAddress.all
Traceback (most recent call last):
ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR:  relation "stake_addresses" does not exist)
LINE 1: SELECT "stake_addresses".* FROM "stake_addresses" LIMIT $1
                                        ^

有没有办法避免 Rails 寻找复数表? 我想还会有很多其他类似的问题,所以我想知道这是否是常见的做法,或者是否是世界上强烈建议避免的事情?

我想我也不需要迁移,因为数据库已经创建好了。这会导致问题发生吗?

我的想法是我将能够连接到两个数据库,一个是已经存在的只读数据库,另一个是我可以将自己的模型作为用户放置的数据库。但是他们能够创建关联跨数据库吗?

也许 Rails 不是这类工作的最佳框架?我在训练营中学到了什么,但也许我应该切换到更灵活的环境?

【问题讨论】:

  • 作为第一个问题的解决方案,只需将self.table_name = 'stake_address' 添加到您的模型文件中。不,你不需要迁移。
  • 我会使用 postgres_fdw 并将您现有的数据库链接到特定于 Rails 的数据库中。然后您的查询可以针对两个数据库运行,就好像它们是一个数据库一样。我认为您不能添加外键,但大多数事情应该可以正常工作。

标签: ruby-on-rails postgresql rails-activerecord


【解决方案1】:

如果没有太多表,我也会推荐@eyeslandic 的建议,并手动覆盖需要它的模型中的表名。

self.table_name = 'stake_address'

如果有很多表,从长远来看,如果您重命名它们会更好。 You can do this safely in production with something like LHM.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 2013-08-03
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多