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 (en realidad, está en el cuerpo del módulo): included
# 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