3

おそらく大量のモデルを持つRailsアプリを構築しています。今のところ、私はユーザーを持っている必要があり、各ユーザーは個人のブログを持っているとしましょう

私は、ユーザーモデルや認証などをカプセル化する別のエンジン(AuthEngineと呼びましょう)でユーザー関連の部分を開発してきました。当時、これは最善のアプローチのようでした。

並行して、私の同僚はブログ機能を処理するために別のエンジンを開発していました(それをBlogEngineと呼びましょう)。次に、他のエンジンに保存されているユーザーデータにアクセスする必要があります。彼は次のように定義することでこれを達成しました。

BlogEngine.user_class = "AuthEngine::User"

このようにして、同じエンジンに保存されていなくても、ユーザーデータを簡単に要求できます。モデル間の関係を定義したいときに問題が発生します

彼は、各ブログ投稿がユーザーのものであると簡単に言うことができます

has_one :user, :class_name => BlogEngine.user_class

しかし、私が知る限り、ユーザーモデルは他のエンジン内にあるため、各ユーザーに複数の投稿があることを指定することはできません。

この結果、彼は次のようなことはできません@user.postsが、代わりに行う必要がありますPost.find_all_by_user(@user)

これに対処するためのよりエレガントな方法はありますか?また、各エンジンがアプリ内でモデルを生成し、カプセル化を削除できる可能性も検討しましたが、モデルの数が急速に増えるため、アプリが混乱し、保守が困難になると思います

4

2 に答える 2

2

blog_engineリレーションを定義するには、内部でユーザークラスを再度開く必要があると思いますがhas_many :posts、それは適切な方法である必要があります。

于 2012-08-06T06:46:30.967 に答える
0

エンジンの依存関係として関係のみを持つ共通のモデルの宝石/エンジンを持つことはどうですか? このようにして、すべてのエンジンで関連するすべての関係にアクセスできます。

于 2012-08-06T21:04:40.963 に答える