2011-03-01 6 views
11

penséEn Ruby or Rails, ¿por qué "incluir" a veces dentro de la clase y, a veces fuera de la clase?

class ApplicationController < ActionController::Base 
    include Foo 

es añadir un "mixin" - para que todos los métodos en el módulo de Foo son tratados como métodos de la ApplicationController.

Pero ahora veo el código que es

include Bar 

class ApplicationController < ActionController::Base 
    include Foo 

¿Por qué es fuera del ApplicationController? ¿En qué se diferencia esto del uso más común de ponerlo dentro de ApplicationController?

+0

'include Bar' como este es un error pernicioso - cambiará' ApplicationController' de la manera que desee, pero también cambiará cualquier otro objeto en la aplicación. –

Respuesta

15

Sí, include Foo dentro de una clase añade Foo a los antepasados ​​de esa clase y por lo tanto hace que todos los métodos de instancia Foo 's disponibles para los casos de clase.

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

Cuestiones relacionadas