Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

311
Vistas
Cargando el módulo en el modelo de usuario en Rails

Intentando poner a disposición los métodos que he almacenado en un Módulo que se encuentra en la app/models (nota al margen: ¿no estoy seguro de si este es el lugar correcto para los módulos?).

Módulo:

 module MyModule class MyClass def some_method # do something end end end

Modelo de usuario:

 class User < ApplicationRecord include MyModule def another_method some_method end end

Obtengo un NoMethodError: NoMethodError (undefined method 'some_method' for #<User:0x00007f6a3ce452c0>

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Parece que no entendiste lo que hacen los módulos y las clases en Ruby. En Ruby, un módulo es simplemente un objeto que envuelve un conjunto de métodos y constantes.

Un módulo puede extender otros módulos, clases y objetos y puede incluirse en clases implementando así la herencia múltiple. Los módulos en Ruby cumplen el rol que los rasgos, espacios de nombres y singletons cumplen en otros lenguajes.

Las clases son en realidad módulos (Module es parte de la cadena de ancestros de Class) con la diferencia clave de que puede crear instancias de una clase y esa clase puede heredar de otra clase y no puede extender otros objetos ni incluirse.

El ejemplo de código aquí en realidad no tiene sentido. Si desea declarar un método que estará disponible para las clases que incluyen un módulo, debe declararlo en el propio módulo:

 module MyModule def some_method # do something end end

Cuando llame a User#another_method , buscará en la cadena de ancestros de la clase User hasta que encuentre el método que está definido en MyModule .

 module MyModule class MyClass def some_method # do something end end end

De hecho, definirá la clase MyClass con un método de instancia que solo está disponible para las instancias de MyClass . Lo único que hace el módulo aquí es cambiar el anidamiento del módulo para que la clase se defina en MyModule en lugar del espacio de nombres global.

over 4 years ago · Santiago Trujillo Denunciar

0

Si desea mezclar un método de un método en su clase, simplemente coloque los métodos directamente en el módulo (sin una clase intermedia).

Módulo:

 module MyModule def some_method # do something end end

Modelo de usuario:

 class User < ApplicationRecord include MyModule def another_method some_method end end
over 4 years ago · Santiago Trujillo Denunciar

0

Eche un vistazo a esta respuesta , primero debe crear una instancia de su clase. o si quieres

 class User < ApplicationRecord include MyModule def another_method my_instance = MyClass.new my_instance.some_method end end

En cuanto a un lugar para almacenar su Módulo, eche un vistazo a esta guía sobre objetos de servicio , me dio algo de inspiración cuando se trata de diferentes módulos.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda