用于抽象遗留数据库的Ruby接口

时间:2013-04-16 11:44:44

标签: ruby ruby-on-rails-3 inheritance dynamic

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

在任何其他语言中,我都有一个对象工厂,它使用适当的环境类生成对象。但据我所知,这种模式对红宝石来说太过分了。

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

我还需要针对每个环境进行单独的迁移 - 任何想法?或者这是源控制问题?

1 个答案:

答案 0 :(得分:0)

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

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

这会隔离您的模型并使代码库更清晰。