扩展Rails引擎功能

时间:2015-01-27 18:06:34

标签: ruby-on-rails ruby abstract-class

我是RoR的初学者,可以使用一些指导。过去几天,我一直在虔诚地控制这个堆栈溢出的答案。

Rails engines extending functionality

但是不断抛出的错误是:'未定义的方法连接'

我有一个名为OrderError的抽象模型。 OrderErrorDetails是我的另一个模型,用于在数据库中实际存储数据。 OrderError抽象模型仅用于提供功能,而不是存储任何内容。 :

module MyEngine
  class OrderError
    self.abstract_class = true
    has_one :order_error_detail

    def self.new
      #my_code
    end

  end
end

所以我尝试而不是要求(上面的堆栈溢出链接)将以下代码放到我的应用程序的订单模型中:

order_error MyEngine::OrderError.new

当我这样做时,我能够成功访问我的引擎OrderError模型。但是,我现在得到的错误是:方法.order()必须包含参数。

我的希望是,一旦将引擎安装到应用程序中,我就可以调用我的引擎各种方法。这将为引擎的用户提供一些默认功能。

我应该开始使用抽象类吗?在我看来答案是肯定的,因为我的抽象模型的唯一目的是提供可以使用的方法。如果是这样,那么如何有效地提供对这些方法的访问?

1 个答案:

答案 0 :(得分:0)

使用:

MyEngine::OrderError.new 

是扩展引擎模型功能的正确方法。在上面的例子中,方法“new”在结构方面存在一些问题。这归结为引擎命名空间。每个类都封装在MyEngine模块(引擎名称)中。这样您的引擎代码就是模块化的,并且与其父应用程序代码分开。关于命名空间的最佳解释是在引导入门指南中找到的:http://guides.rubyonrails.org/v3.2.13/engines.html#what-are-engines