2012-01-01 8 views
2

現在、私はRoRアプリケーション(2.3.14 ActiveRecord)で作業しています(Aと呼ぶ)。Railsモデル(api/gem/plugin)を外部化する方法

私は別のプロジェクトB(capybaraを使った遠隔テストアプリ、以下のように見えます:https://github.com/searls/remote-capybara-cucumber-example)を開始しました。

しかし、私はテストデータセットアップ(場合によってはテストアサーション)のためにアプリケーションBのモデルにアクセスする必要があります。したがって、既存のモデルクラス(および必要に応じてfactory_girlのようないくつかの追加ライブラリ)を使用したいと思います。

私は確かに、私のプロジェクトBをRailsアプリケーションでラップし、モデルクラスをコピーしたくありません。 Bがモデルにアクセスしてエンティティを作成/更新/破棄できるように、Aを整理する方法はありますか?

は、さらなる研究のための任意のキーワードは、(私はレールモデルなどを外部化、プラグインとして、宝石のようにレールモデルを含むいくつかのGoogle検索を試してみました...しかし、便利なものは何も

答えて

1
)のActiveRecordのほとんどのドキュメント(上がっていないあります

Rails 2.xでは、2つのアプリケーション間でモデルレイヤーを共有することが非常に難しくなります。

2回のマイグレーションを気にする必要がなければ、モデルを宝石に入れてアプリケーションに必要とします。

別の方法は、dbとをシンボリックリンクすることです両方のアプリケーションのディレクトリを共有フォルダにコピーします。レーキタスクとジェネレータは両方のアプリケーションに影響するため、これは非常にうまく動作します。

Rails 3.1には、レールエンジンの改良された実装が付属しています。エンジンを使用すると、レールアプリケーションの一部を分離し、それらを宝石としてパッケージ化することができます。

+0

あなたが「移行を維持する」ことで、正確に何を意味するのは、移行はちょうど彼らが(Railsのアプリで)だったか、彼らは宝石にする必要がありますし、滞在することができませんでした同じように? – leifg

+0

2つのレールアプリがあるので、どちらのアプリケーションでも移行を実行できる必要があります。最も簡単な方法は、それらを両方のアプリケーションにコピーすることです。新しいレール3.1エンジンには、より洗練されたメカニズムがあります。各エンジンには、エンジンからホストアプリケーションへの移行をコピーするレーキタスクがあります。このようにして、移行を一度書くだけでどこでも使えます。お役に立てれば。 – balu

+0

実際、2番目のアプリはRailsアプリにはなりません。問題ありますか? – leifg

-1

BプロジェクトのAのapp/modelsディレクトリにエイリアス(シンボリックリンク)を使用してみることができます。マック/ Linuxの

ln -s /volumes/code/project-a/app/models/ /volumes/code/project-b/models 
+0

@ baluさんの答えを読んでいませんでしたが、そこには注意すべきことも書かれています。 – Jurgen

関連する問題