我正在使用 Ruby on Rails 3.2.9 和 Ruby 1.9.3-p125。在我上一个问题之后,我最终发现我在元编程一个自我实现的acts_as_customizable
插件方面遇到了问题,因为相关代码对其他类有副作用,而不是“充当可定制”。
总结一下这个问题:“内部”(通过元编程)acts_as_customizable
为模型声明的方法向模型添加了一个方法,并且为了节省时间,Rails 不会在启动时加载所有这些类,从而使应用程序引发a直到类已加载。Article
customize
Comment
NoMethodError - undefined method 'customize' for #<Comment:0x0...>
Article
一个提议的解决方案是require_dependency 'article'
在Comment
模型中,但我正在寻找另一种方法(也许,比提议的更好)让应用程序像现在一样工作,但没有任何问题,就像在这个问题中解释的那样. 也就是说,我想保留*短代码**和相同的行为,但使用更“合适”的方式来制作东西,可能会更改类的加载过程或计划对整个代码进行大重构,如果需要的话。
我应该如何处理这种情况?你有什么想法?
更新:经过一番研究,我发现问题仅出现在开发模式下,因为config.cache_classes
设置为false
在每次请求时重新加载类。
注意:我想指出元编程在我的案例中非常有用,Article
并且在我的“定制”概念Comment
方面,类之间高度相关。所以我想找到一个解决方案来缓解下属行为的变化。
* 就我而言,元编程(即使它有副作用)让我避免了很多代码语句。