答えはここにあるようです:http://handyrailstips.com/tips/4-loading-observers-automatically-from-their-own-folder。
web.archive.orgからコピーされたコンテンツ、2009-05-2519:36:17にアーカイブ
オブザーバーを自分のフォルダーから自動的にロードする
gavin
オブザーバーは、モデルをクリーンアップして乾燥させるための優れた方法です。メールの送信、メッセージのログ記録など、モデルの責任ではないものを処理するために、これらを頻繁に使用します。
オブザーバーを発見してから私を悩ませていることの1つは、オブザーバーがデフォルトで呼び出されないことです。代わりに、どのオブザーバーをロードする必要があるかを明示的に指定する必要があります(通常はenvironment.rbにあります)。
アプリの起動時にすべてのオブザーバーを環境からロードすることを計画している場合(これは可能性が高いです)、次をenvironment.rbファイルに追加して、アプリの起動時にすべてのオブザーバーを自動的にロードできます。
# config/environment.rb
Dir.chdir("#{Rails.root}/app/models") do
config.active_record.observers = Dir["*_observer.rb"].collect {|ob_name| ob_name.split(".").first}
end
これは少し厄介に見えますが、ここで行っているのは、modelsフォルダー内のすべてのオブザーバーファイルの名前を見つけて、それぞれをロードするようにアプリを構成することだけです。
config.active_record.observers =
オブザーバーについて私を悩ませているもう1つのことは、デフォルトでモデルフォルダーに保存されていることです。複数のモデルと複数のオブザーバーを使用して大きなアプリを構築している場合、これはかなり雑然として混乱する可能性があります。
これを回避するために、私は通常、app/に「observers」という新しいフォルダーを作成します。次に、作成したオブザーバーをこのフォルダーに移動します。
このフォルダが起動時にロードされることを確認するために、environment.rbに以下を追加します
config.load_paths += "#{Rails.root}/app/observers"
単純!
オブザーバーを自動的にロードする前のヒントと一緒にこれを使用する場合は、検索しているディレクトリの名前をモデルからオブザーバーに変更する必要があります。
# config/environment.rb
Dir.chdir("#{Rails.root}/app/observers") do
config.active_record.observers = Dir["*_observer.rb"].collect {|ob_name| ob_name.split(".").first}
end
新しいオブザーバーを作成した後、またはenvironment.rbに変更を加えた後は、アプリを再起動することを忘れないでください