2009-05-31 8 views
20

Con un módulo de Ruby, puede agrupar un conjunto de métodos que puede usar en un lugar y luego incluirlos en una clase, por lo que es como si los hubiera escrito en esa clase.¿Cuándo considerar la posibilidad de crear su propio módulo Ruby en la aplicación Rails?

¿Qué tipos de usos prácticos hay para los módulos Ruby en una aplicación de rieles?

Agradecería que alguien mencionara un ejemplo de dónde usaron un módulo propio, así que tengo una idea de las situaciones en las que debería pensar crearlas. Gracias.

+0

Excelente pregunta. Curioso por ver qué respuestas obtienes. – fig

Respuesta

12

Puede colocarlos en el directorio/lib y se cargarán con su proyecto Rails.

Por ejemplo, se puede ver esta cesión temporal de la mina de un viejo proyecto: lib directory of a Rails project

Así, por ejemplo, tengo el siguiente módulo:

google_charts.rb 

Module GCharts 
    class GoogleCharts 
    def some_method 

    end 
    end 
end 

y en cualquier lugar en mi aplicación Rails, que pueda acceder a los métodos.

Así que si tuviera que acceder a él desde un controlador, yo simplemente hacer:

require 'google_charts' 

GCharts::GoogleCharts.some_method 
+0

Gracias. Los detalles de implementación son buenos de conocer. Pero estaba pensando más en las líneas de los tipos de funcionalidad en una aplicación de Rails que usaría un módulo para encapsular. – lorz

+1

Cualquier cosa que no pertenezca a su controlador o modelo :). En otros proyectos, hemos tenido un utilities.rb que realmente no tenía un lugar dentro de ningún controlador/ayudante/modelo pero que era necesario. Así que los guardamos en el directorio lib. Además, hay otras bibliotecas que escribimos que no necesitan ser su propio complemento. – mwilliams

+1

¿Cómo se determina cuándo algo no llega a ser un complemento pero no pertenece al controlador o modelo? – lorz

7

Utilizamos módulos de funcionalidad que no está ligada a modelos ActiveRecord y no ha sido resumidas en un plugin o joya.

Un ejemplo reciente de nuestra base de código de producción es una biblioteca para integrarse con Campaign Monitor para la gestión de listas de correo electrónico. El núcleo del sistema usa nuestro modelo de usuario, pero la interacción real con el servicio externo se abstrae a través de un módulo que vive en/lib.

18

1) Cada vez que estoy a punto de duplicar (o sustancialmente duplicar) una pieza de código: "Oh, sólo podía cortar/pegar en este otro controlador..."

2) Cada vez que escriba un código que obviamente será reutilizado en el futuro.

3) Código de tamaño considerable que tiene un propósito específico, cuando ese propósito es bastante distinto del objetivo principal del controlador/modelo. Esto está relacionado de alguna manera con (2), pero a veces el código no se reutiliza, pero un módulo ayuda a la organización.

Cuestiones relacionadas