我只是在开发一个有很多引擎的Rails应用程序。 但是,我无法编辑引擎内的关系。
要解决此问题,我想创建一个关系-Gem,它将包含在应用程序中并定义关系(请参阅: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应用程序,则不会建立关系。
我错过了什么? 如何实现这一目标?
非常感谢您提前
答案 0 :(得分:0)
确定, 所以我找到了解决方案。
您可以使用装饰器对引擎进行修补(需要将其放入config / initializers / initializer_name.rb)
请参阅:Extending a ruby gem in Rails
不知道这是不是一件好事,但它就像一个魅力......
缺点是每次更改猴子修补时都必须重新启动服务器......
编辑:看来这个猴子补丁在几次请求后会被垃圾收集。
编辑2: 这篇文章帮助了我 How to monkey-patch code that gets auto-loaded in Rails? 你需要为你的Inativeizer添加一些薄的东西来强迫rails为每个请求重新加载你的补丁
Rails.configuration.to_prepare do
答案 1 :(得分:0)
activesupport-decorators gem可以在加载原始类时为您加载装饰器。