2009-12-07 10 views
8

Algunas funcionalidades dentro de mi aplicación de rieles se ven mejor como si fuera un "módulo" separado, al que se debe acceder a través del require. Por ejemplo, supongamos que es una función calcular los números de Fibonacci.¿Dónde debería colocar mi propio "módulo" dentro de la aplicación de rieles?

La funcionalidad es independiente en la aplicación de rieles y puede reutilizarse en otros proyectos, por lo que no debería almacenarse cerca de controladores de aplicaciones y modelos, supongo. Pero como no voy a separarlo en un proyecto separado, colocarlo en la carpeta vendor parece no ser lo correcto.

¿Dónde debería colocarlo entonces?

Respuesta

6

El lugar para poner código reutilizable como este se encuentra en el directorio lib. Sin embargo, no necesita require nada, ya que lib ya se encuentra en la ruta de carga y su contenido se cargará durante la inicialización.

Si necesita extender una clase existente, primero defina su módulo y luego inclúyalo enviándolo como un mensaje a la clase que desea extender, p. Ej.

module MyExtensions 
    def self.included base 
    base.instance_eval do 
     def my_new_method 
     … 
     end 
    end 
    end 
end 

ActiveRecord::Base.send :include, MyExtensions 
2

A menudo pongo cosas en lib, resulta que cualquier cosa bajo lib está en la ruta de carga y no necesita ser require d en absoluto.

editar: Después del comentario de Steve, eliminó el error de tener que solicitar los archivos. Además, eliminé un par de requisitos de algunos de mis códigos: P

+1

no es necesario que solicite los archivos en 'lib' como en la ruta de carga –

+0

que yo no sabía. Gracias. – rfunduk

2

Hay un directorio lib en proyectos RoR que encaja bien para ese propósito: coloco bits comunes de código en forma de "bibliotecas" allí. Cualquier cosa desde extender las clases de ActiveRecord a métodos de utilidad reutilizables.

Cuestiones relacionadas