1

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

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

假设,我有一个用户(命名空间和隔离)引擎和一个评论(命名空间和隔离)引擎。我想要的是覆盖/扩展关系-Gem 中的关系,这将共享关系。

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

class Comment < CommentEngine::Comment
  belongs_to :user
end

class User < UserEngine::User
  has_many :comments
end

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

我错过了什么?如何做到这一点?

非常感谢您提前

4

2 回答 2

0

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

于 2014-03-04T13:10:35.800 回答
0

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

你可以用装饰器给你的引擎打猴子补丁(你需要把它放到 config/initializers/initializer_name.rb 中)

请参阅:在 Rails 中扩展 ruby​​ gem

不知道这是否是一件好事,但它就像一个魅力......

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

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

编辑 2:这篇文章帮助我解决了 如何修补在 Rails 中自动加载的代码? 您需要在 Intializer 中添加薄罪,以强制 rails 为每个请求重新加载您的补丁

Rails.configuration.to_prepare do
于 2013-08-27T07:19:09.613 回答