Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

315
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!