Подтвердить что ты не робот

Добавление метода встроенного класса в приложение rails

Я хочу добавить метод в класс Array в приложении rails. Где я должен поместить этот метод?

РЕДАКТИРОВАТЬ, чтобы быть яснее, очевидно, я помещал его в файл где-нибудь, но как я могу сказать, что приложение rails о том, где его найти?

4b9b3361

Ответ 1

Один из способов сделать это - создать файл в 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'

Ваш пробег с подчиненными объектами может отличаться.

Ответ 2

По умолчанию, когда вы вызываете "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 "из любой точки, и он будет загружаться.

Ответ 3

Просто поместите его в новый файл, например. array_extended.rb

class Array

  def my_new_method()
    ...
  end

end

После этого вы можете включить этот файл с require "array_extended.rb". Убедитесь, что вы не переопределяете уже существующие методы, так как это может нарушить другие функции.