5

によってマップされたPostgreSQLデータベース(最大10個のテーブル)を備えたRails3アプリケーションがありますactiverecord。すべてが正常に機能しています。

ただし、次のものを使用することもできます。

  • 画像を保存するためのMongoDBデータベース(おそらくmongoidgemを使用)。
  • 一部のテーブルでは、PostgreSQLの代わりにNeo4jデータベース(おそらくgemを使用neo4j-rails

のおかげで、1つのRailsORMでデータベースを使用するのは簡単database.ymlです。しかし、複数のORMがある場合、どのように処理できますか?そうするための良い方法はありますか?たとえば、ActiveHash(およびActiveYaml)はActiveRecordでうまく機能します。異なるORMを連携させる可能性があると思います。ヒントをありがとう。

4

3 に答える 3

6

これは実際にはORMのタイプによって異なります。これを行うための優れた方法は、継承を使用することです。たとえば、database.ymlファイルで複数のデータベースとアダプターを定義できます。ActiveRecordのestablish_connectionメソッドを使用して、これらと簡単に通信できます。

# A typical Active record class
class Account < ActiveRecord::Base
  ...
end

# A new database connection
class NewConnection < ActiveRecord::Base
  self.abstract_class = true
  establish_connection "users_database"
end

# A new Active record class using the new connection
class User < NewConnection
  ...
end

ここでの唯一の欠点は、複数のアクティブレコードデータベースに接続している場合、移行が少し厄介になる可能性があることです。

ORMのミキシング

ORMSの混合は簡単です。たとえば、mongodb(mongoidを使用)の場合、アクティブレコードから継承せず、mongoを使用するモデルに次のものを含めます。

class Vehicle
  include Mongoid::Document

  field :type
  field :name

  has_many :drivers
  belongs_to :account

end

アクティブなモデルの上に構築されたORMは、非常にうまく連携します。たとえば、mongoidを使用すると、ActiveRecordモデルとの関係を定義できるはずです。これは、複数のデータベースを持つことができるだけでなく、アクティブモデルを介して簡単に通信できることを意味します。

于 2012-07-03T01:36:46.903 に答える
0

まず、同じアプリに複数のORMを含めないようにすることを強くお勧めします。必然的に、Mongoidオブジェクトを何らかの方法でActiveRecordオブジェクトに「関連付ける」必要があります。そして、いくつかの方法があります(以下を参照)...しかし、それらのすべては最終的に痛みにつながります。

あなたがこれをする必要があると思うなら、あなたはおそらく何か間違ったことをしているでしょう。画像を保存するためにMongoDBが必要なのはなぜですか?また、イメージストアとして使用している場合、なぜMongoidまたはその他のORM(より正確にはODM)が必要になるのでしょうか。本当に、2番目のデータストアと2番目のORM / ODMを追加する必要がある場合は、それを別のアプリとしてスピンオフし、最初のアプリからサービスとして呼び出すことができますか?これについてよく考えてください。

そうは言っても、本当に「ポリグロットの永続性」(私の用語ではない)を使いたいのであれば、まともな宝石があります:https ://github.com/jwood/tenacity 。もはや積極的に開発されていませんが、メンテナはバグを修正し、問い合わせやプルリクエストに迅速に対応します。

于 2014-01-27T22:22:41.723 に答える
0

さて、私は今日、neo4jgemを使用して同じ問題を抱えていました。application.rbにrequire'active_graph/railtie'を追加しました。

したがって、ActiveGraphを使用してモデルを生成する場合は、次を使用します。rails generate model Mymodel --orm active_graph、-ormオプションを使用すると、使用するormを指定できます。

--ormオプションを指定しない場合、デフォルトでARが使用されます。

于 2021-05-04T21:12:00.810 に答える