Rails Gem与Rails引擎的模型关系

时间:2013-08-26 19:50:25

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 gem

我只是在开发一个有很多引擎的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应用程序,则不会建立关系。

我错过了什么? 如何实现这一目标?

非常感谢您提前

2 个答案:

答案 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可以在加载原始类时为您加载装饰器。