В Rails, как добавить новый метод в класс String? - программирование
Подтвердить что ты не робот

В Rails, как добавить новый метод в класс String?

Я хочу создать индекс для разных объектов в проекте Rails и хотел бы добавить метод count_occurences, который я могу вызвать для объектов String.

Я видел, что мог сделать что-то вроде

class String
  def self.count_occurences
    do_something_here
  end
end

Каков точный способ определить этот метод и куда поместить код в проект Rails?

Спасибо

4b9b3361

Ответ 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