Начиная с Rails 3.1, синтаксис немного упрощен ActiveSupport :: Concern:
Теперь вы можете сделать
require 'active_support/concern'
module M
extend ActiveSupport::Concern
included do
scope :disabled, where(:disabled => true)
end
module ClassMethods
...
end
end
ActiveSupport :: Концерн также обнаруживает зависимости включенного модуля, вот документация
[обновление, адресованное комментарию aceofbassgreg]
Rails 3.1 и более поздние версии ActiveSupport :: Concern позволяют напрямую включать методы экземпляра включаемого модуля, так что нет необходимости создавать модуль InstanceMethods внутри включенного модуля. Также в Rails 3.1 и более поздних версиях больше нет необходимости включать M :: InstanceMethods и расширять M :: ClassMethods. Таким образом, у нас может быть более простой код, подобный этому:
require 'active_support/concern'
module M
extend ActiveSupport::Concern
# foo will be an instance method when M is "include"'d in another class
def foo
"bar"
end
module ClassMethods
# the baz method will be included as a class method on any class that "include"s M
def baz
"qux"
end
end
end
class Test
# this is all that is required! It's a beautiful thing!
include M
end
Test.new.foo # ->"bar"
Test.baz # -> "qux"