0

我正在使用现有架构的旧版 SQL Enterprise 数据库之上构建应用程序,但我也希望使用类似但更传统的 ActiveRecord 架构来支持 PostgreSQL。我为每个数据库提供了一组 ActiveRecord 类,它们抽象了模式差异并为视图和控制器提供了一个通用接口。我希望能够根据环境/配置切换在应用程序级别使用的类集。

在任何其他语言中,我都会有一个对象工厂,它使用适合环境的类来生成对象。但我知道这样的模式对于 ruby​​ 来说太过分了。

如果我有两个类,IssuePg 和 IssueLegacy,有没有办法可以配置我的应用程序,以便调用 Issue.new 实例化适当的模型?我知道我可以将类分配给一个变量,但是我将在哪里执行它,这样它将是系统范围的并且对 Rails 不可见并且与脚手架兼容,所以我可以围绕问题搭建脚手架,然后根据环境更改问题超类?

我还需要为每个环境提供一组单独的迁移 - 有什么想法吗?或者这是一个源代码控制问题?

4

1 回答 1

0

您可以这样做的一种严厉方式是使用环境或命令行变量,然后执行以下操作:

if Rails.env['db_support'] == :legacy
    require '/path/to/legacy/ar/objects'
else
    require '/path/to/normal/ar/objects'
end

这会隔离您的模型并使代码库更加简洁。

于 2013-04-16T12:04:05.100 回答