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

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

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

Ответы [ 2 ]

1 голос
/ 18 марта 2014

Согласно ответу keruilin, страница больше не существует, но имеет заявленный код:

# 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

и для тех, кто предпочитает корневую папку «приложение / наблюдатели»:

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

Dir.chdir("#{Rails.root}/app/observers") do
  config.active_record.observers = Dir["*_observer.rb"].collect {|ob_name| ob_name.split(".").first}
end
1 голос
/ 04 июня 2010

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


Содержимое Скопировано с web.archive.org, заархивировано 2009-05-25 19: 36: 17

Автоматическая загрузка наблюдателей из собственной папки

Гэвин

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

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

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

config.active_record.observers =

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

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

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

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

Simple!

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

# 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

Не забудьте перезагрузить приложение после создания нового наблюдателя или внесения каких-либо изменений в среду. Rb

...