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

拥有一个只有关系作为引擎依赖项的通用模型 gem/engine 怎么样?这样您就可以访问每个引擎中的所有相关关系。

于 2012-08-06T21:04:40.963 回答