2014-02-06 1 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 

Выше заявление возвращает истину, если определен класс и возвращать ложь в противном случае

+4

Не будет! ! ClassName rescue false' проще? – BroiSatse

+0

Да, это другой способ – usha

+0

Как насчет спасения ClassName false? ClassName правдиво, если оно существует =) – Abdo

6

Вы можете использовать safe_constantize.

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