2012-01-30 4 views
0

로드 방법 & 레일 응용 프로그램에서 사용되는 모든 활성 레코드 모델 모음을 가져옵니다. 젬, 플러그인, 상위 계층의 활성 레코드베이스를 가진 서브 클래스로부터 클래스를 제공해야합니다.rails 애플리케이션에서 모든 클래스를 수동으로로드하는 방법은 무엇입니까?

ActiveRecord::Base.descendants.collect(&:name) 

은 모든 목록이로드 된 후에 만 ​​목록을 제공합니다. rails app 내에 모든 클래스를 수동으로로드 할 수있는 방법이 있습니까?

+0

나는 이미 많은 방법 http://www.funonrails.com/2012/01/get-models-list-inside-rails-app.html로 운동을했지만 깨끗한 결론을 내놓지 못했다. tadman의 대답을 읽은 후, 가능하지 않다는 것을 깨달았습니다. –

답변

3

루비의 문제를 "모든 클래스 것은"확인하기 다소 어려운 일 것입니다. 그 중 일부는 동적 및 조건 적으로 생성 될 수 있습니다.

은 가끔은 그냥 app/models에 존재하는 무엇을로드 할 수 있습니다

Dir.glob(File.expand_path("app/models/*.rb", Rails.root)).each do |model_file| 
    require model_file 
end 

당신이 사람들을 포함해야합니다 모델을 포함 할 수있는 다른 위치에 있다면, 너무.

당신은하지만, 종속성이있을 수 있으며 그이 오토로더가 기본적으로 사용하고 일을 그냥로드되지 왜 모델 B. 전에로드에서 모델 A를 배제 할 수있다.

신뢰할 수있는 유일한 방식을 그들 모두에게 적어도 한 번 이상 운동을시켜야합니다.

+0

자세한 설명을 주셔서 감사합니다. 레일즈 앱 내부에서 사용되는 클래스를로드하는 특정 방법이 있어야하지만, 필요할 때마다 자동 로더가 클래스를로드하지 않는 날이 오기까지는. –

2

데시벨 테이블을 기반으로 모델 목록 얻기 -

ActiveRecord::Base.connection.tables.collect{|t| t.singularize.camelize.constantize rescue nil}.compact 
+0

잘만되면 위의 작업은 항상 db 테이블과 관련된 모델을 가지고 있기 때문에 필요하지 않습니다. –

관련 문제