2014-02-06 4 views
4

나는 많은 클래스 메소드로 정의 된 유틸리티 클래스를 가지고있다. Rails 콘솔에서 Object.const_defined?을 사용하여 클래스를 검색하면 false를 반환합니다. 그러나 클래스 메서드 중 하나를 호출하거나 클래스의 인스턴스를 만든 후 Object.const_defined?은 true를 반환합니다. 이것은 일종의 게으른 로딩 인스턴스화 유형 때문에 발생합니까? 아직 인스턴스화하지 않은 경우에도 true를 반환하는 클래스의 존재를 확인할 수있는 또 다른 방법이 있습니까?레일스 인스턴스화되지 않은 경우 클래스의 존재 여부를 확인하려면 어떻게해야합니까?

+0

그냥 열심히 시도해보십시오. 클래스가로드되지 않은 경우로드되지 않았습니다 (예 : http://stackoverflow.com/q/19839847/438992 –

+0

). 감사합니다. 정보를 보내 주셔서 감사합니다. 더 잘 이해할 수 있습니다. – zako42

답변

5

이 해킹의 일종이지만, 문 위

Object.const_get(:ClassName).is_a?(Class) rescue false 

클래스가 정의 된 경우 true를 반환하고, 그렇지 않으면

+4

안된다! ! ClassName 구조를 false로 간단하게? – BroiSatse

+0

그래, 그 또 다른 방법 – usha

+0

ClassName 구조를 false로 만드는 것은 어떻습니까? ClassName은 존재하는 경우 truey입니다.) – Abdo

6

당신은 safe_constantize을 사용할 수 있습니다 false를 반환합니다 작동합니다.

your_class = "YourClassName".safe_constantize 
    if your_class && your_class.class == Class 
    your_class.new(options).run 
    end