добавление метода во встроенный класс в приложении rails - PullRequest
21 голосов
/ 24 марта 2009

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

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

Ответы [ 3 ]

40 голосов
/ 24 марта 2009

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

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

6 голосов
/ 24 марта 2009

По умолчанию, когда вы вызываете «require», Rails будет искать (из граничного источника Rails):

приложение приложение / металл приложение / модели приложение / контроллеры приложение / хелперы приложение / услуги Lib поставщик

Для простоты поместите файл в lib / и укажите его по имени в config / environment.rb, или вы можете поместить его в config / initializers / array_extension.rb, и он будет автоматически загружен.

Там, где я работаю, мы поместили все наши расширения в базовую библиотеку Ruby в плагин и сохранили его в (Rails.root /) vendor / plugins / utilities / 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'" из любого места, и оно загрузится.

0 голосов
/ 24 марта 2009

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

class Array

  def my_new_method()
    ...
  end

end

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...