В Ruby on Rails, чтобы расширить класс String, куда следует помещать код? - PullRequest
74 голосов
/ 13 апреля 2011

Если в Ruby on Rails мне нужно добавить метод с именем

class String
  def capitalize_first
    # ...
  end
end

и спросить, куда должен идти файл?(какой каталог и имя файла и нужен ли какой-либо код инициализации?) Это для проекта Rails 3.0.6.

Ответы [ 3 ]

128 голосов
/ 13 апреля 2011

Я всегда добавляю каталог core_ext в мой lib каталог.

Создайте инициализатор для загрузки пользовательских расширений (например: config/initializers/core_exts.rb).И добавьте в него следующую строку:

Dir[File.join(Rails.root, "lib", "core_ext", "*.rb")].each {|l| require l }

и получите ваше расширение как:

lib/core_ext/string.rb

class String
  def capitalize_first
    # ...
  end
end
62 голосов
/ 13 апреля 2011

Вы можете сделать это в config / initializers / string.rb

class String
  def capitalize_first
    # ...
  end
end

должно быть всем, что вам нужно (кроме перезапуска приложения).

5 голосов
/ 16 ноября 2011

Рекомендации в Rails 3.1 - это путь:

http://guides.rubyonrails.org/plugins.html#extending-core-classes

Если вы следуете соглашению по умолчанию, вам не нужно связываться с конфигурацией инициализатора.

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