【发布时间】: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