2013-02-13 2 views
1

Я использую:Мой класс вызывает несуществующий класс?

  • Рубин 1.9.2
  • Rails 3.1.10

Это мой код:

class Report::ExpectedHour 

    def initialize(user, options = {}) 
    @user  = user 
    @date_start = options[:start] 
    @date_end = options[:end] 
    end 

    def expected_hours_range 
    previous = ExpectedHour.previous_dates(@user, @date_start).first 
    hours_range = ExpectedHour.between_dates(@user, @date_start, @date_end) 

    unless hours_range.include?(previous) 
     hours_range << previous 
    end 

    hours_range 
    end 

end 

Каждый раз, когда я называю expected_hours_range от моего экземпляра Я получаю эту ошибку:

NameError: uninitialized constant Report::ExpectedHour::ExpectedHour 
from /home/edelpero/.rvm/gems/[email protected]/gems/aws-s3-0.6.2/lib/aws/s3/extensions.rb:206:in `const_missing_from_s3_library' 
from /opt/lampp/htdocs/titi/app/models/report/expected_hour.rb:10:in `expected_hours_range' 

Я не уверен, почему Report::ExpectedHour::ExpectedHour вызван, потому что я звоню ExpectedHour, который является фактически существующим классом ActiveRecord. Также Report::ExpectedHour::ExpectedHour не существует.

+0

Префикс: –

ответ

2

При вызове классов внутри ваших методов класса ruby ​​ожидает, что он будет либо классом, вложенным внутри вас, либо самим классом, либо константой. Попробуйте следующее:

class MyClass 
    def some_method 
    use_external_class = ::ExternalClass::CONSTANTB.bla 
    # Use the '::' 
    end 
end 
+0

Спасибо Дэйв Ньютон и никога за разъяснения, это сработало отлично. У меня есть еще один вопрос. Итак, почему внутри моего класса ActiveRecord мне не нужно использовать :: при вызове другой модели? Еще раз спасибо. – edelpero

+0

Не задавайте другой вопрос в своем комментарии. Search Stack Overflow для ответа, и, если он не появляется, создайте новый вопрос для этой конкретной вещи. –