我正在使用Ruby on Rails 3.2.9和Ruby 1.9.3-p125。方案如下:
我实现了一个acts_as_customizable
插件,我有一个Article
模型类“充当可自定义的”。该插件通过元编程,将一个名为customize
的方法添加到Comment
模型类( note :因为这个,该插件有副作用,因为操纵Comment
对象范围之外的Article
对象。
鉴于这种情况,当我(重新)启动服务器并运行@comment.customize
时,我收到错误NoMethodError - undefined method 'customize' for #<Comment:0x0...>
。但是,当我(重新)启动服务器并运行以下代码时,所有工作都按预期工作:
Article
@comment.customize
如果我理解了“邪恶”部分,上面的代码就可以了,因为在运行Article
方法之前对customize
类进行“简单”调用会使其成为触发acts_as_customizable
方法,然后将customize
方法添加(通过元编程)到Comment
类。
我该如何避免“邪恶”?
答案 0 :(得分:1)
这是由懒惰/自动加载引起的。为了节省时间轨,不会在启动时加载所有类。相反,它会在必要时加载它们。如果您从未访问Article
,则表示未加载Comment
,因此require_dependency
未获取其动态方法。
我该如何避免“邪恶”?
简单回答:使用Article
(谢谢,@ cryo28)
正确答案:不要做恶。使插件行为更可预测/更少混淆。如果它应用于Article
,则应该Comment
而不是{{1}}。