rails only before ruby-on-rails ruby-on-rails-3 activesupport ruby-on-rails-3.2

ruby on rails - only - ¿Por qué el módulo InstanceMethods ha quedado en desuso?



params controller rails (1)

Me encanta ActiveSupport::Concern .

Facilita agregar funcionalidad a sus clases, con una buena sintaxis.

De todos modos, en Rails 3.2, el módulo InstanceMethods ha quedado en desuso. Si entendí correctamente, deberíamos definir nuestros métodos en el bloque included (en realidad, está en el cuerpo del módulo):

# edit: don''t do this! The method definition should just be in the body of the module included do def my_method; end end

Me preguntaba si alguien sabe por qué decidieron hacer eso.


Veamos el ejemplo que vinculaste primero.

module TagLib extend ActiveSupport::Concern module ClassMethods def find_by_tags() # ... end end module InstanceMethods def tags() # ... end end end

Cuando incluye TagLib en su clase, AS Concern extiende automáticamente la clase con el módulo ClassMethods e incluye el módulo InstanceMethods.

class Foo include TagLib # is roughly the same as include TagLib::InstanceMethods extend TagLib::ClassMethods end

Pero como se habrá dado cuenta, ya estamos incluyendo el propio módulo TagLib, por lo que los métodos definidos en él ya están disponibles como métodos de instancia en la clase. ¿Por qué querría tener un módulo InstanceMethods separado entonces?

module TagLib extend ActiveSupport::Concern module ClassMethods def find_by_tags() # ... end end def tags() # ... end end class Foo include TagLib # does only `extend TagLib::ClassMethods` for you end