ruby on rails que Añadiendo un método a la clase incorporada en la aplicación Rails.



ruby on rails que es (3)

Quiero agregar un método a la clase Array en una aplicación de rieles. ¿Dónde debo poner este método?

EDITAR para ser más claro, obviamente lo puse en un archivo en algún lugar, pero ¿cómo le digo a la aplicación de Rails dónde encontrarlo?

https://src-bin.com


Answer #1

De forma predeterminada, cuando llama a "require", Rails buscará (desde la fuente de borde de Rails):

app app / metal app / models app / controllers app / helpers app / services lib vendor

Para simplificar, ponga el archivo en lib / y solicítelo por su nombre en config / environment.rb, o puede ponerlo en config / initializers / array_extension.rb, y se cargará automáticamente.

Donde trabajo, hemos puesto todas nuestras extensiones en la biblioteca principal de Ruby en un complemento, y las almacenamos en (Rails.root /) vendedor / plugins / utilities / lib / core_ext, y luego requerimos las extensiones individuales en el init.rb del plugin

Otra forma de proteger a este gato: si dice, quiere almacenar sus extensiones de núcleo en Rails.root / core_ext, luego puede agregar esa ruta como una ruta de carga en su bloque de configuración en environment.rb:

Rails::Initializer.run do |config|
  config.load_paths << 'core_ext'
end

Entonces puedes llamar "require 'array_extension'" desde cualquier lugar, y se cargará.


Answer #2

Simplemente array_extended.rb en un archivo nuevo, por ejemplo, array_extended.rb

class Array

  def my_new_method()
    ...
  end

end

Después de eso, puede incluir este archivo con require "array_extended.rb" . Asegúrese de no anular los métodos ya existentes, ya que esto puede dañar otras funciones.


Answer #3

Una forma de hacer esto es crear un archivo en lib/rails_extensions.rb . Luego, agrega tus extensiones de esta manera:

class Array
  def bring_me_food
    # ...
  end

  def make_tea
    # ...
  end
end

class Hash
  def rub_my_shoulders
    # ...
  end
end

Luego, en config/environment.rb , agrega esto:

require 'rails_extensions'

Su kilometraje con objetos subordinados puede variar.





ruby