0

既存のスキーマを使用してレガシー SQL Enterprise データベースの上にアプリケーションを構築していますが、同様の従来型の ActiveRecord スキーマを使用して PostgreSQL もサポートしたいと考えています。スキーマの違いを抽象化し、ビューとコントローラーに共通のインターフェイスを提供する ActiveRecord クラスのセットをデータベースごとに用意しました。環境/構成に従って、アプリケーション レベルで使用されるクラスのセットを切り替えられるようにしたいと考えています。

他の言語では、環境に適したクラスを使用してオブジェクトを生成するオブジェクト ファクトリが必要です。しかし、そのようなパターンがルビーにとってやり過ぎであることは理解しています。

IssuePg と IssueLegacy の 2 つのクラスがある場合、Issue.new を呼び出して適切なモデルをインスタンス化するようにアプリを構成する方法はありますか? クラスを変数に割り当てることができることはわかっていますが、システム全体で Rails から見えず、スキャフォールディングと互換性があるようにするには、どこでそれを行うのでしょうか?

また、環境ごとに個別の移行セットが必要です - 何か考えはありますか? それとも、これはソース管理の問題ですか?

4

1 に答える 1

0

これを行うための面倒な方法の 1 つは、環境変数またはコマンド ライン変数を使用して、次のようにすることです。

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 に答える