在Rails应用程序之间共享AR模型

时间:2014-12-22 15:57:04

标签: ruby-on-rails rails-activerecord

我有一个问题,我一直试图解决一段时间。我有4个不同的Rails应用程序使用相同的数据库,这意味着他们需要使用相同的模型并具有相同的迁移。我最初通过创建一个打包到gem中的Rails引擎解决了这个问题,然后使用它来运行所有模型和迁移。现在我意识到有一些功能只有一个应用程序需要,但其他功能不需要 - 比如管理应用程序需要有为所有模型提供可排序表的方法 - 其他应用程序根本不需要这个功能。

所以我的想法是找到一种方法,我可以从gem提供“基础”模型,同时在我的特定应用程序中增加这些基本模型,以在需要时添加其他功能。我首先尝试的是继承:

class User < Base::User
end

这不起作用,因为现在您的加载路径中有2个用户模型(User和Base :: User),并且在查询关联时,它总是选择关联记录类的“最近”类 - 这意味着当您有一个Model :: Account属于belongs_to:user,它会选择Model :: User作为关联类,而不是User。我尝试颠倒AR类型的计算方法,但这只会导致更多问题。

技术上我可以从基础引擎(gem)提供我的所有模型,但问题是如何在我的应用程序中扩展这些模型? .class_eval感觉真的很脏,继承不起作用,提供基本功能,因为mixins意味着“基础”模型感觉不到并且看起来像模型。我的目标是尽可能减少其他开发人员的摩擦,我希望他们能够像往常一样在gem中定义他们的模型,然后还有一种简单的方法可以在其他应用程序中扩展该功能。

有没有人在此之前解决过这个问题或有任何建议?或者你们如何在更大的应用程序中解决这个问题?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

Rails guides中提到了这一点。它描述了使用Decorator模式进行类修改。