0

次のコードがあります。

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 サーバーを再起動することです。

なぜこうなった?どうすれば修正できますか?

4

1 に答える 1

2

問題は、初期化子がサーバーの起動時にのみ読み込まれることです。私はあなたの Cms::Page が後でリロードされ、追加されたメソッドがなくなりました。このコードをイニシャライザではなく、依存クラスでリロードされる場所に配置することを検討する必要があります。

于 2012-08-16T08:49:08.403 に答える