Использование наблюдателя в движке

Я создал движок, который в основном используется для всех наших проектов.

Теперь, что я хочу сделать, это добавитьbefore_create Обратный звонок ко всем моделям в этом двигателе.

После некоторых поисков я обнаружил, что наблюдатель - это путь.

Итак, я создал этого наблюдателя:

<code># app/models/baco/auth/auth_observer

class Baco::Auth::AuthObserver < ActiveRecord::Observer

  def before_create( record )
    p record
  end

end
</code>

Теперь мне нужно добавить его в приложение, но, конечно, в моем движке нет такого файла, как application.rb, поэтому я поместил его в свой движок:

<code># 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
</code>

Но я получаю следующую ошибку при запуске сервера:

<code>.../.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)
</code>

Ответы на вопрос(1)

Решение Вопроса

В двигателях вместоapplication.rb вы должны использоватьlib/[engine_name]/engine.rb

Кроме того, если вы создаете наблюдателя внутри движка, вам необходимо указать пространство имен.

 Tim Baas06 апр. 2012 г., 15:20
Получил его, изменив его имя наBaco::Auth::UserObserverи добавивobserve метод .. Большое спасибо!
 06 апр. 2012 г., 15:00
И вы можете указать не только символы в конфигурации.config.active_record.observers = Baco::AuthObserver также приемлемо
 06 апр. 2012 г., 14:57
Ты можешь использоватьobserve метод внутри наблюдателя, чтобы указать, какая модель наблюдаема
 Tim Baas06 апр. 2012 г., 15:08
Я обновил свой вопрос, указав, что Baco :: Auth :: AuthObserver даетuninitialized constant Baco::Auth::AuthObserver (NameError) при запуске сервера ..
 Tim Baas06 апр. 2012 г., 13:32
Спасибо за ваш ответ. Я сейчас использую файл движка вместо application.rb. Также я поместил AuthObserver в пространство имен, как и остальная часть моего движка. Единственная проблема в том, как я могу указать на наблюдателя в пространстве имен? Использование: baco_auth_observer указывает на BacoAuthObserver вместо Baco :: AuthObserver. И просто: auth_observer также не работает.

Ваш ответ на вопрос