我是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()必须包含参数。
我的希望是,一旦将引擎安装到应用程序中,我就可以调用我的引擎各种方法。这将为引擎的用户提供一些默认功能。
我应该开始使用抽象类吗?在我看来答案是肯定的,因为我的抽象模型的唯一目的是提供可以使用的方法。如果是这样,那么如何有效地提供对这些方法的访问?
答案 0 :(得分:0)
使用:
MyEngine::OrderError.new
是扩展引擎模型功能的正确方法。在上面的例子中,方法“new”在结构方面存在一些问题。这归结为引擎命名空间。每个类都封装在MyEngine模块(引擎名称)中。这样您的引擎代码就是模块化的,并且与其父应用程序代码分开。关于命名空间的最佳解释是在引导入门指南中找到的:http://guides.rubyonrails.org/v3.2.13/engines.html#what-are-engines