2016-09-29 7 views
2

кажется, что автозагрузчик загружая Библиотека/инструменты/адрес и не моя модельLoadError Невозможно автозагрузку постоянной

Адрес выдает следующее сообщение об ошибке

LoadError: Unable to autoload constant Address, expected /lib/tools/address.rb to define it

Может кто-нибудь сказать мне, что я делаю неправильно , Я думал, что
Адрес будет указывать на постоянные модели/address.rb
и
Инструменты :: Адрес для Lib/инструменты/address.rb

приложение/модели/address.rb

Библиотека/инструменты/address.rb

module Tools 
    class Address 
    blah blah 
    end 
end 
+0

есть недостающий конец в Lib/инструменты/address.rb. Это просто опечатка? – jaydel

+0

@jaydel да, только опечатка – bopritchard

ответ

5

в моем опыте это может быть сложно использовать несколько констант с тем же именем, но с разными пространствами имен. В вашем случае у вас есть две константы Address, одна на верхнем уровне и другая внутри пространства имен . Это может привести к запуску автозагрузчика Rails.

Некоторые возможные решения:

Если вы хотите использовать верхнего уровня Address (т.е. вашей модели), относятся к нему явно с помощью ::Address.

Если это не сработает, вы также можете использовать require_dependency, чтобы дать автозагрузчику намек на то, что вы хотите. В верхней части файла, который дает вам LoadError, добавьте эту строку:

require_dependency("address") 

Вот документация:

require_dependency

Interprets a file using mechanism and marks its defined constants as autoloaded. file_name can be either a string or respond to to_path.

Use this method in code that absolutely needs a certain constant to be defined at that point. A typical use case is to make constant name resolution deterministic for constants with the same relative name in different namespaces whose evaluation would depend on load order otherwise.

 Смежные вопросы

  • Нет связанных вопросов^_^