1
我創建了一個基本上用於我們所有項目的引擎。在引擎中使用觀察器
現在我想要做的是添加一個before_create
回調到這個引擎中的所有模型。
經過一番搜索後,我發現觀察者是要走的路。
所以,我創造了這個觀察:
# app/models/baco/auth/auth_observer
class Baco::Auth::AuthObserver < ActiveRecord::Observer
def before_create(record)
p record
end
end
現在我需要把它添加到應用程序,當然在我的引擎有沒有這樣的文件作爲application.rb中,所以我已經把它放在我的引擎:
# lib/baco/auth/engine.rb
require 'rails'
require 'devise'
module Baco
module Auth
class Engine < Rails::Engine
engine_name 'baco_auth'
config.active_record.observers = :auth_observer
end
end
end
,但我得到關於啓動服務器以下錯誤:
.../.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.1/lib/active_support/inflector/methods.rb:229:in `block in constantize': uninitialized constant AuthObserver (NameError)
感謝您的回覆,我現在使用引擎文件而不是application.rb。我還將AuthObserver放置在名稱空間中,就像我的引擎的其餘部分一樣。唯一的問題是,我如何指向名稱空間的觀察者?使用:baco_auth_observer指向BacoAuthObserver而不是Baco :: AuthObserver。只是:auth_observer也不起作用。 – 2012-04-06 11:32:38
您可以在observer中使用'observe'方法來指出哪個模型是可觀察的 – MikDiet 2012-04-06 12:57:44
而且您不僅可以在config中指向符號。 'config.active_record.observers = Baco :: AuthObserver'也可以接受 – MikDiet 2012-04-06 13:00:54