modules define_method ruby-on-rails ruby module mixins

ruby-on-rails - define_method - modules in ruby



En Ruby o Rails, ¿por qué "incluir" a veces dentro de la clase y, a veces fuera de la clase? (1)

pensé

class ApplicationController < ActionController::Base include Foo

es agregar un "mixin" - para que todos los métodos en el módulo Foo sean tratados como métodos del ApplicationController.

Pero ahora veo código que es

include Bar class ApplicationController < ActionController::Base include Foo

Entonces, ¿por qué está fuera de ApplicationController ? ¿En qué se diferencia esto del uso más común de ponerlo dentro de ApplicationController ?


Sí, include Foo dentro de una clase agrega Foo a los antepasados ​​de esa clase y, por lo tanto, pone todos los métodos de instancia de Foo a disposición de las instancias de esa clase.

Fuera de cualquier definición de clase, include Foo agregará Foo a los antepasados ​​de Object . Es decir, es lo mismo que include Foo dentro de la definición de la clase Object . El uso de esto es que todos los métodos de instancia de Foo están ahora disponibles en todas partes.