Search code examples
ruby-on-railsrubyruby-on-rails-4

What does class_methods do in concerns?


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

Solution

  • 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