rails modules ruby-on-rails-3 module

ruby-on-rails-3 - rails modules



¿Cómo crear y usar un módulo usando Ruby on Rails 3? (2)

Estoy usando Ruby on Rails 3 y me gustaría mover algunos códigos personalizados y compartidos en un módulo.

  1. ¿Qué sintaxis debo usar para escribir el código del módulo?
  2. ¿En qué carpeta de mi aplicación tengo que colocar el archivo del módulo?
  3. ¿Cómo tengo que incluir ese módulo en una o más clases de controlador?
  4. ¿Qué otra acción, si hay alguna, debo usar el módulo personalizado en cualquier lugar de mi aplicación?
  5. ¿Cómo puedo llamar a métodos en el módulo desde mi aplicación?

Gracias por adelantado.


A> 1. Puede usar la misma sintaxis que cualquier otra clase de ruby. Por ejemplo, estoy definiendo un módulo VehicleClassifer que va a utilizar el método classify_vehicle para clasificar un vehículo en función de la cantidad de ruedas que recibe como entrada.

module VehicleClassifer def classify_vehicle(number_of_wheels) VehicleType.where("number_of_wheels = ?", number_of_wheels) end end

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

class SomeController < ApplicationController include VehicleClassfier def index classify_vehicle(4) end end

en la clase estás usando el módulo y tendrás acceso a todos los métodos del módulo.

Además, en caso de que necesite usar un módulo en su aplicación, puede incluirlo en su controlador de aplicación.


Para 1. Se crea / abre un módulo simplemente diciendo:

module MyModule def first_module_method end end

Para 2. La carpeta lib . Si desea organizar sus módulos en la carpeta lib , puede colocarlos en los módulos. Por ejemplo, si quisiera una subcarpeta super_modules sus módulos se definirían de la siguiente manera:

module SuperModules module MyModule def first_module_method end end end

A 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:

class MyClass include MyModule def some_method first_module_method #calls module method end end

Para 4. En primer lugar, asegúrese de que su módulo sea realmente necesario en todas las clases de su aplicación. Si no es así, tiene sentido incluirlo solo donde se necesita para no inflar las clases que no lo necesitan de todos modos. Si realmente quieres el módulo en todas partes, incluye mirar la jerarquía de clases de tus clases en la aplicación. ¿Quieres el módulo en todos los modelos? Puede abrir ActiveRecord :: Base y agregar agregar su módulo allí.