Я хочу добавить метод в класс Array в приложении rails. Где я должен поместить этот метод?
РЕДАКТИРОВАТЬ, чтобы быть яснее, очевидно, я помещал его в файл где-нибудь, но как я могу сказать, что приложение rails о том, где его найти?
Я хочу добавить метод в класс Array в приложении rails. Где я должен поместить этот метод?
РЕДАКТИРОВАТЬ, чтобы быть яснее, очевидно, я помещал его в файл где-нибудь, но как я могу сказать, что приложение rails о том, где его найти?
Один из способов сделать это - создать файл в lib/rails_extensions.rb
. Затем добавьте свои расширения так:
class Array
def bring_me_food
# ...
end
def make_tea
# ...
end
end
class Hash
def rub_my_shoulders
# ...
end
end
Затем в config/environment.rb
добавьте следующее:
require 'rails_extensions'
Ваш пробег с подчиненными объектами может отличаться.
По умолчанию, когда вы вызываете "require", Rails будет смотреть (из исходного источника Rails):
Приложение приложение/металл приложение/модели приложение/контроллеры приложение/хелперы приложение/услуги Lib поставщик
Для простоты поместите файл в lib/и потребуйте его по имени в config/environment.rb, или вы можете поместить его в config/initializers/array_extension.rb, и он будет автоматически загружен.
Где я работаю, мы поместили все наши расширения в основную библиотеку Ruby в плагин и сохранили его в (Rails.root/) поставщике/плагинах/утилитах/lib/core_ext, а затем мы требуем индивидуального расширения в плагине init.rb.
Другой способ обмануть этого кота: если вы говорите, хотите сохранить свои основные расширения в Rails.root/core_ext, вы можете добавить этот путь в качестве пути загрузки в своем конфигурационном блоке в environment.rb:
Rails::Initializer.run do |config|
config.load_paths << 'core_ext'
end
Затем вы можете вызвать "require" array_extension "из любой точки, и он будет загружаться.
Просто поместите его в новый файл, например. array_extended.rb
class Array
def my_new_method()
...
end
end
После этого вы можете включить этот файл с require "array_extended.rb"
.
Убедитесь, что вы не переопределяете уже существующие методы, так как это может нарушить другие функции.