Синтаксис для загрузки наблюдателей (в образцовом подкаталоге) в environment.rb?

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

model --> observer --> user_observer.rb, activity_observer.rb, etc.

До размещения в подкаталоге я загружал наблюдателей как это:

Rails::Initializer.run do |config|
   config.active_record.observers = :user_observer, :activity_observer
end

Теперь, когда я пытаюсь запустить сервер, я получаю следующую ошибку:

`load_missing_constant': Expected /Users/cscairns/source/myapp/app/models/observer/user_observer.rb to define UserObserver (LoadError)

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

Observer::UserObserver < ActiveRecord::Observer
1
задан keruilin 24 June 2010 в 21:35
поделиться

1 ответ

Похоже, что ответ можно найти здесь: http://handyrailstips.com/tips/4-loading-observers-automatically-from-their-own-folder.


Content Copied from web.archive.org, archived on 2009-05-25 19:36:17

Loading Observers Automatically From Their Own Folder

by gavin

Наблюдатели - отличный способ очистки и высушивания ваших моделей. Я использую их довольно часто, чтобы справиться с отправкой почты, протоколированием сообщений и всем остальным, что не входит в обязанности модели.

Одна вещь, которая беспокоит меня с тех пор, как я открыл для себя наблюдатели, заключается в том, что они не вызываются по умолчанию. Вместо этого вы должны явно указать, какие наблюдатели должны быть загружены (обычно в 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 =

Еще одна вещь, которая меня беспокоит в наблюдателях, это то, что они по умолчанию хранятся в папке models. Если вы создаете большое приложение с несколькими моделями и несколькими наблюдателями, это может стать довольно беспорядочным и запутанным.

Чтобы обойти это, я обычно создаю новую папку в app/ под названием 'observers'. Затем я перемещаю всех наблюдателей, которых создаю, в эту папку.

Чтобы убедиться, что эта папка загружается при запуске, я добавляю следующее в environment.rb

config.load_paths += "#{Rails.root}/app/observers"

Просто!

Если вы решите использовать это вместе с предыдущим советом по автоматической загрузке наблюдателей, то вам придется изменить название директории, в которой вы ищете, с models на 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

.
1
ответ дан 3 September 2019 в 00:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: