【问题标题】:What's the cause of this NoMethodError?这个 NoMethodError 的原因是什么?
【发布时间】:2012-08-16 08:34:54
【问题描述】:

我有以下代码:

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 开发服务器。

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

【问题讨论】:

    标签: ruby-on-rails ruby metaprogramming


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2016-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-08
      • 1970-01-01
      • 2018-09-01
      • 2010-11-21
      相关资源
      最近更新 更多