Ruby on rails Rails Gem与Rails引擎的模型关系

Ruby on rails Rails Gem与Rails引擎的模型关系,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.2,gem,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.2,Gem,我正在开发一个Rails应用程序,它将有许多引擎。 但是,我无法编辑引擎内部的关系 为了解决这个问题,我想创建一个关系Gem,它将包含在应用程序中并定义关系,请参见: 让我们假设,我有一个用户命名和隔离的引擎和一个注释命名和隔离的引擎。 我想要的是覆盖/扩展关系Gem中的关系,它将共享这些关系 因此,我在relationships Gem中添加了一个文件/app/models/comment.rb,其中包含以下行: class Comment < CommentEngine::Commen

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

为了解决这个问题,我想创建一个关系Gem,它将包含在应用程序中并定义关系,请参见:

让我们假设,我有一个用户命名和隔离的引擎和一个注释命名和隔离的引擎。 我想要的是覆盖/扩展关系Gem中的关系,它将共享这些关系

因此,我在relationships Gem中添加了一个文件/app/models/comment.rb,其中包含以下行:

class Comment < CommentEngine::Comment
  belongs_to :user
end

class User < UserEngine::User
  has_many :comments
end
如果我运行rails应用程序,则不会建立关系

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

事先非常感谢

好的, 所以我找到了解决办法

你可以用装饰器来修补你的引擎,你需要把它放到config/initializers/initializer\u name.rb中

见:

我不知道这是不是一件好事,但它就像一个符咒

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

编辑:看起来这个猴子补丁会在几个请求后被垃圾收集

编辑2: 这篇文章帮了我的忙 您需要在初始化器中添加thin,以强制rails为每个请求重新加载修补程序

Rails.configuration.to_prepare do

gem可以在加载原始类时为您加载装饰程序。

您可以将控制器的代码发布到构建关联的位置并创建新操作吗?在comments\u controller:def index@comments=current\u user.comments结束未定义的方法“comments”,因为似乎从未加载模型。即使我在文件中输入了一个拼写错误,也不会发生任何事情。非常感谢你!在创建新注释的阶段,在CommentsController中,您的新建和创建操作是什么样子的?它们尚未实现。我只有一个上面描述的索引操作。我想您正在处理现有的数据库记录?你可以看看这个,看看第4.1点