I am reading some codes which use the concerns in Rails 4.
I read some articles to say, if we would like to include class methods
using module ClassMethods
, but the code I read using something like:
class_methods do
def ****
end
end
It's just for convenience. module ClassMethods
is pure Ruby, but class_methods
is defined in ActiveSupport::Concern
for convenience. If you look at a source code you'll find that class_methods
does exactly the same thing
# activesupport/lib/concern.rb
def class_methods(&class_methods_module_definition)
mod = const_defined?(:ClassMethods, false) ?
const_get(:ClassMethods) :
const_set(:ClassMethods, Module.new)
mod.module_eval(&class_methods_module_definition)
end