Rails Gem与Rails Engines的模型关系

我只是在开发一个有很多引擎的Rails应用程序。 但是,我无法编辑引擎内部的关系。

为了解决这个问题,我想创建一个关系-Gem,它将包含在Application中并定义关系(参见: https : //stackoverflow.com/a/11835899/603126 )。

让我们假设,我有一个用户(命名空间和隔离)引擎和一个注释(命名空间和隔离)引擎。 我想要的是覆盖/扩展关系中的关系 – Gem将分享关系。

所以我添加了一个文件/app/models/comment.rb与这些行(到关系-Gem):

class Comment < CommentEngine::Comment belongs_to :user end class User < UserEngine::User has_many :comments end 

如果我运行我的rails应用程序,则不会建立关系。

我错过了什么? 怎么能实现这一目标?

非常感谢你提前

好的,所以我找到了解决方案。

您可以使用装饰器对引擎进行修补(需要将其放入config / initializers / initializer_name.rb)

请参阅: 在Rails中扩展ruby gem

不知道这是不是一件好事,但它有点像魅力……

缺点是每次更改猴子修补时都必须重新启动服务器…

编辑:似乎这个猴子补丁将在几次请求后被垃圾收集。

编辑2:这篇文章帮助我了解如何在Rails中自动加载猴子补丁代码? 你需要为你的Inativeizer添加一些薄的东西来强迫rails为每个请求重新加载你的补丁

 Rails.configuration.to_prepare do 

activesupport-decorators gem可以在加载原始类时为您加载装饰器。