这个NoMethodError的原因是什么?

时间:2012-08-16 08:34:54

标签: ruby-on-rails ruby metaprogramming

我有以下代码:

Cms::Page.class_eval do
  def self.fetch_by_slug(slug)
    Rails.cache.fetch("cms_page_#{slug}") { Cms::Page.find_by_slug(slug) }
  end
end
config/initializers/cms_mp.rb

中的

问题是,我在布局文件中调用了fetch_by_slug,因此,每次请求都会调用它。在开发模式下,如果我执行了触发重新加载类的操作,则会收到错误消息undefined method fetch_by_slug for #<Class:0xbff20e8>,唯一的解决方法是重新启动rails devel服务器。

为什么会这样?我该如何解决?

1 个答案:

答案 0 :(得分:2)

看起来问题是初始化程序仅在服务器启动时加载。我你的Cms :: Page重新加载,然后添加的方法我去了。您应该考虑将此代码放在初始化程序中,而不是将其重新加载到依赖类中。