В Rails, как добавить новый метод в класс String?
Я хочу создать индекс для разных объектов в проекте Rails и хотел бы добавить метод count_occurences, который я могу вызвать для объектов String.
Я видел, что мог сделать что-то вроде
class String
def self.count_occurences
do_something_here
end
end
Каков точный способ определить этот метод и куда поместить код в проект Rails?
Спасибо
Ответы
Ответ 1
Вы можете определить новый класс в своем приложении в lib/ext/string.rb
и поместить в него этот контент:
class String
def to_magic
"magic"
end
end
Чтобы загрузить этот класс, вам нужно будет потребовать его в файле config/application.rb
или в инициализаторе. Если у вас было много из этих расширений, инициализатор лучше! Способ загрузки просто:
require 'ext/string'
Затем метод to_magic
будет доступен в экземплярах класса String
внутри вашего приложения/консоли, то есть:
>> "not magic".to_magic
=> "magic"
Плагинов не требуется.
Ответ 2
Я знаю, что это старый поток, но не похоже, что принятое решение работает в Rails 4+ (по крайней мере, не для меня). Вложил расширение rb файла в конфигурацию/инициализаторы.
В качестве альтернативы вы можете добавить /lib в автозагрузчик Rails (в config/application.rb, в классе Application:
config.autoload_paths += %W(#{config.root}/lib)
require 'ext/string'
Смотрите это:
http://brettu.com/rails-ruby-tips-203-load-lib-files-in-rails-4/
Ответ 3
Если вы хотите расширить какой-то основной класс, вы обычно хотите создать плагин (он удобен, когда нужен этот код в другом приложении). Здесь вы можете найти руководство по созданию плагина http://guides.rubyonrails.org/plugins.html, а в пункте 3 показано, как расширить класс String: http://guides.rubyonrails.org/plugins.html#extending-core-classes