2015-01-16 3 views
0

Глобальная переменная ruby ​​$: показывает, что находится в пути загрузки. Когда я смотрю на пути загрузки моего приложения рельсы, я сразу замечаю Либерал каталог в корневом каталоге Rails в нем:требует инструкции для классов в пути загрузки?

puts $: 
/Users/myuser/projects/myproject/lib 
/Users/myuser/projects/myproject/app/assets 
/Users/myuser/projects/myproject/app/controllers 
/Users/myuser/projects/myproject/app/helpers 
/Users/myuser/projects/myproject/app/mailers 
/Users/myuser/projects/myproject/app/models 
... 

Я добавил файл с именем my_module.rb и включает в себя модуль MyModule. Я придерживаюсь метода hello_world, который ставит «hello world». Теперь, когда я включаю модуль в модели рельсов, как это:

class MyModel < ActiveRecord::Base 
    include MyModule 
end 

И тогда я запущу консоль:

2.1.2 :001 > m = MyModel.new 
NameError: uninitialized constant MyModel::MyModule 

Рубин не может найти исходный файл MyModel. Для тог эт это работало, я явно требуют:

class MyModel < ActiveRecord::Base 
    require 'my_module' 
    include MyModule 
end 

Сейчас работают вещи:

2.1.2 :001 > m = MyModel.new 
2.1.2 :001 > b.hello_world 
2.1.2 :001 > hello world 
2.1.2 :001 > => nil 

Поскольку Lib уже в пути загрузки, почему я должен все еще явно требует MyModule? И как рельсы уйти, а не использовать, нужны повсюду?

ответ

1

$: или $LOAD_PATH переменная содержит список путей, в которых Ruby будет искать файлы, требуемые модулем или классом. Только поиск и не «включать» их, поэтому вы должны заботиться об этом самостоятельно.

У Rails есть функция автозагрузки, и вы можете определить ее в файле config/appliaction.rb или в среде (config/enviroments/development.rb). Here you have more informations. Вы можете добавить что-то вроде этого:

config.autoload_paths += %W(#{config.root}/lib) 

После того, что вы могли бы включать модель без require команды.

Дополнительные ресурсы: объяснил

telladifferentstory

blogarkency

+0

хорошо. –

+0

Было бы здорово, если бы я мог объединить свои аккаунты – Donato

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