Hi fellow Rubyists,
I saw methods defined directly in included block when using Concern
several times.
module AModule
extend ActiveSupport::Concern
included do
# this is BAD
def a_method
end
end
end
It is a bad practice and it breaks things, all instance methods should
go to the AModule, and all class methods to a ClassMethods module.
- It dynamically creates methods in each class, they are not shared
through module, it is slow. - It cannot be accessed for extension, there is no module to include to.
- it breaks
super
calls.
We should avoid using this and go for:
module AModule
extend ActiveSupport::Concern
included do
# e.g.
has_one :user
end
module ClassMethods
def a_method
end
end
end
Thanks.
I'll create issue to remove these bad definitions.
Petr