不同引擎上的模型之间的ActiveRecord关系

时间:2012-07-28 19:43:45

标签: ruby-on-rails activerecord rails-engines

我正在构建一个可能会拥有大量模型的Rails应用程序。现在让我们说我需要有用户,每个用户都有一个个人博客

我一直在单独的引擎(我们称之为AuthEngine)上开发用户相关的部分,它封装了用户模型,身份验证等。当时这似乎是最好的方法

与此同时,我的同事正在开发另一个引擎,以处理博客功能(我们称之为BlogEngine)。 现在,他需要访问存储在其他引擎中的用户数据。他通过定义:

来实现这一目标
BlogEngine.user_class = "AuthEngine::User"

这样,即使它没有存储在同一个引擎中,他也可以轻松地询问用户数据。当我们想要定义模型之间的关系时,问题出现了

他可以很容易地说每篇博文都属于用户

has_one :user, :class_name => BlogEngine.user_class

但据我所知,他无法指定每个用户都有多个帖子,因为用户模型位于其他引擎内

这样做的结果是他不能做@user.posts之类的事情,而是必须做Post.find_all_by_user(@user)

有更优雅的方式来解决这个问题吗? 我还考虑过每个引擎可以简单地在应用程序内部生成模型,删除封装的可能性,但由于模型的数量会快速增长,我认为这将使应用程序更加混乱,而不是那么多可维护的

2 个答案:

答案 0 :(得分:2)

我认为您应该在blog_engine内重新打开用户类,以便定义has_many :posts关系,这应该是合适的方式。

答案 1 :(得分:0)

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