programas - metodos en ruby
En Rails, ¿cómo agregar un nuevo método a la clase String? (3)
Quiero construir un índice para diferentes objetos en mi proyecto Rails y me gustaría agregar un método ''count_occurences'' al que pueda llamar en objetos String.
Vi que podía hacer algo como
class String
def self.count_occurences
do_something_here
end
end
¿Cuál es la forma exacta de definir este método y dónde colocar el código en mi proyecto de Rails?
Gracias
Cuando desee extender alguna clase principal, generalmente desea crear un complemento (es útil cuando necesita este código en otra aplicación). Aquí puede encontrar una guía sobre cómo crear un plugin http://guides.rubyonrails.org/plugins.html y el punto 3 que le muestra cómo extender la clase String: http://guides.rubyonrails.org/plugins.html#extending-core-classes
Puede definir una nueva clase en su aplicación en lib/ext/string.rb
y poner este contenido en ella:
class String
def to_magic
"magic"
end
end
Para cargar esta clase, deberá config/application.rb
en su archivo config/application.rb
o en un inicializador. Si tenía muchas de estas extensiones, ¡un inicializador es mejor! La forma de cargarlo es simple:
require ''ext/string''
El método to_magic
estará disponible en instancias de la clase String
dentro de su aplicación / consola, es decir:
>> "not magic".to_magic
=> "magic"
No se necesitan complementos.
Sé que este es un hilo viejo, pero no parece que la solución aceptada funcione en Rails 4+ (al menos no para mí). Poner el archivo de extensión rb en config / initializers funcionó.
Alternativamente, puede agregar / lib al cargador automático de Rails (en config / application.rb, en la clase Application:
config.autoload_paths += %W(#{config.root}/lib)
require ''ext/string''
Vea esto: http://brettu.com/rails-ruby-tips-203-load-lib-files-in-rails-4/