2010-06-04 3 views
1

모델 관측가가 많아 모델 폴더 아래의 하위 디렉토리에 구성하고 싶습니다.environment.rb의 옵서버 (모델 하위 디렉토리에 있음)를로드하는 구문은 무엇입니까?

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

전에 하위 디렉토리에 배치하는,이 같은 관측을로드이었다

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

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

를 지금은 서버를 시작하려고 할 때, 나는 다음과 같은 오류가 발생합니다

관찰자가 생겼으니 environment.rb에서 사용해야하는 올바른 구문은 무엇입니까?

Observer::UserObserver < ActiveRecord::Observer 

답변

1

답변과 같이 보이는 여기에 있습니다 : http://handyrailstips.com/tips/4-loading-observers-automatically-from-their-own-folder.

관찰자 개빈하여 자신의 폴더에서 자동으로 2009-05-25 19시 36분 17초

로드 관찰자에 보관 web.archive.org에서 복사


내용, 청소하고 모델을 건조하는 좋은 방법입니다. 나는 메일을 보내고, 메시지를 기록하고, 모델의 책임이 아닌 다른 것을 기록하는 데 상당히 많은 것을 사용합니다.

내가 관찰자를 발견 한 이래로 저를 괴롭혔던 한 가지는 기본적으로 호출되지 않는다는 것입니다. 대신 어떤 관찰자가로드되어야하는지 명시해야합니다 (일반적으로 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 

이 좀 지저분 해 보이지만, 여기에 모든 일을 단순히 모든 관찰자 모델 폴더에있는 파일의 이름을 찾는 것입니다 : 당신이 당신의 응용 프로그램을 시작할 때 자동으로 그들 모두를로드하여 environment.rb에 파일 각 앱을로드하도록 앱 구성

config.active_record.observers = 

기본적으로 모델 폴더에 버그가 저장되어있는 것을 관찰하는 또 하나의 사실이 있습니다. 여러 모델과 여러 관찰자가있는 큰 앱을 만들면 복잡하고 혼란 스러울 수 있습니다.

나는이 문제를 해결하기 위해 보통 app/viewers라는 새 폴더를 만듭니다. 그런 다음 내가 만든 모든 관측자를이 폴더로 이동합니다.

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

간단한 environment.rb에 다음을 확인이 폴더는 내가 추가 시작시로드되어 있는지 확인하세요!

# 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 
: 당신이 자동으로 관찰자로드에 이전 팁과 함께 이것을 사용하기로 결정한 경우

다음 디렉토리는에 관찰자에게 모델에서 찾고의 이름을 변경해야합니다

keruilin의 대답은 당

+3

당신은 SO 여기에 대답을 게시 할 수 있을까요? 링크 한 페이지가 더 이상 존재하지 않습니다 ... –

+0

http://web.archive.org/web/20090525193617/http://handyrailstips.com/tips/4- loading-observers-automatically-from-their- 자신의 폴더 – batkuip

0

을 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/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