Ruby on rails 扩展应用程序&x27;rails引擎中的s模型

Ruby on rails 扩展应用程序&x27;rails引擎中的s模型,ruby-on-rails,ruby,ruby-on-rails-4,ruby-on-rails-plugins,rails-engines,Ruby On Rails,Ruby,Ruby On Rails 4,Ruby On Rails Plugins,Rails Engines,我有一个定义了一些模型的应用程序。我想将一些模型的功能(例如添加方法、添加关联)从应用程序扩展到我的引擎。 我尝试在引擎中添加一个与我的应用程序模型同名的模型,Rails将自动合并它们,但不起作用 例如: (应用程序的模型) class文章

我有一个定义了一些模型的应用程序。我想将一些模型的功能(例如添加方法、添加关联)从应用程序扩展到我的引擎。 我尝试在引擎中添加一个与我的应用程序模型同名的模型,Rails将自动合并它们,但不起作用

例如: (应用程序的模型)

class文章“度量”
结束
结束

当我尝试访问@Articles.metrics时,有许多关联没有应用到我的文章模型中。有什么想法吗

您的度量模型是否与文章有关联


您可能希望为关联的另一方提供文章的度量,以使其正常工作。另外,请确保进行迁移,以便在度量表上保存文章id。一切正常。

你的想法正确,而且很接近。但是您的实现有点不成功

通常,您的引擎应该对主机应用程序有了解。这样,您的引擎和主机应用程序保持松散耦合。因此,引擎中的类应该而不是从主机应用程序中的类继承。(顺便说一句,我相信你的方法不起作用,因为ruby经常查找,但这是一个不同的讨论。)

相反,使用。在主机应用程序中,您可以执行以下操作:

  class Article < ActiveRecord:Base 
    include FooEngine::BarModule

    def from_application
      puts "application"
    end

  end
当ruby解释器在
文章中包含
FooEngine::BarModule
时,它将查找并运行
FooEngine::BarModule
中的
self.included
方法,将
文章
类作为
base
传递

然后在
基础上调用
class\u eval
Article
),它将重新打开
Article
类,以便您可以添加方法或进行任何类似的操作(就地定义新方法,包括或扩展其他模块等)

在您的示例中,您调用了
has\u many
方法,该方法将创建
has\u many
提供的各种关联方法

如果(a)你将通过你的引擎增加很多度量相关的功能,(b)你想要有很多类使用度量相关的功能,并且(c)你希望一些功能从一个类到另一个类(其中包括),你可以考虑创建一个<代码> ActhsIasHaviguyMigult(或类似)。一旦你走上这条路,这将是一个奇妙的元编程的全新世界


祝你好运。

我想课堂评估就是你要找的。我没有这方面的经验,但最近读到:@Arun Kumar M,你有你的度量模型吗?你的文章有关联吗。您的迁移看起来如何?您的度量表是否包含文章id。您得到的确切错误消息是什么?@OlalekanSogunle是的,我知道!我仔细检查了:)@siax:检查了那个链接。但是它不适用于关联。您可以添加您收到的确切错误消息吗?是的,我可以!我有关联,所以如果以后安装FooEngine,您必须返回到每个模型(如文章)并添加“include FooEngine::BarModule”?这似乎有点奇怪。还有别的办法吗?
  class Article < ActiveRecord:Base 
    include FooEngine::BarModule

    def from_application
      puts "application"
    end

  end
  module FooEngine
    module BarModule
      def self.included(base)
        base.class_eval do 
          has_many :metrics, :class_name => 'Metric'
        end
      end
    end 
  end