Estoy usando Ruby on Rails 3 y me gustaría mover un código personalizado y compartido en un módulo.
- ¿Qué sintaxis debo utilizar para escribir el código del módulo?
- ¿En qué carpeta de mi aplicación tengo que colocar el archivo del módulo?
- ¿Cómo tengo que incluir ese módulo en una o más clases de controlador?
- ¿Qué otra acción, si corresponde, tengo que usar el módulo personalizado en cualquier lugar de mi aplicación?
- ¿Cómo puedo llamar a métodos en el módulo desde mi aplicación?
Gracias por adelantado.
ruby-on-rails-3
module
user502052
fuente
fuente
Respuestas:
Para 1. Un módulo se crea / abre simplemente diciendo:
Para 2. La
lib
carpeta. Si desea organizar sus módulos en lalib
carpeta, puede ponerlos en módulos. Por ejemplo, si quisiera una subcarpeta,super_modules
sus módulos se definirían de la siguiente manera:Hasta el 3./5. Al incluir el módulo en una clase, simplemente puede llamar a los métodos de los módulos como si estuvieran definidos dentro de la clase:
Para 4. Primero, asegúrese de que su módulo sea realmente necesario en cada clase de su aplicación. Si no es así, tiene sentido incluirlo solo donde sea necesario para no inflar las clases que no lo necesitan de todos modos. Si realmente desea que el módulo esté en todas partes, incluya un vistazo a la jerarquía de clases de sus clases en la aplicación. ¿Quieres el módulo en todos los modelos? Puede abrir ActiveRecord :: Base y agregar su módulo allí.
fuente
lib
carpeta, una nota importante es permitir que Rails3 descomente la líneaconfig\application.rb
paraconfig.autoload_paths
: lea, por ejemplo, stackoverflow.com/questions/1073076/rails-lib-modules- y ... Nota también que debe tener cuidado de usar un nombre de archivo para su módulo que coincida con el nombre del módulo en sí. Entonces, si lo guardalib/test/my_module.rb
, debe hacerloinclude Test::MyModule
; para obtener más detalles, consulte stackoverflow.com/questions/4073856/rails-3-autoloadapp/models
si el código necesita acceso a otros modelos. Si tu código es realmente una 'biblioteca' y puede existir por sí solo, sugiera vender una gema. Para ver ejemplos, consulte github.com/shageman/the_next_big_thingA> 1. Puede utilizar la misma sintaxis que cualquier otra clase de ruby. Por ejemplo, estoy definiendo un módulo VehicleClassifer que utilizará el método classify_vehicle para clasificar un vehículo en función del número de ruedas que recibe como entrada.
A> 2. Los módulos generalmente se almacenan en la carpeta / lib.
las preguntas 3, 4, 5 tienen más o menos la misma respuesta. puedes usar
en la clase que está utilizando el módulo y tendrá acceso a todos los métodos del módulo.
Además, en caso de que necesite utilizar un módulo en su aplicación, puede incluirlo en el controlador de su aplicación.
fuente
ApplicationHelper
?