{
    "mode": "ri",
    "parameter": "ActiveSupport::Concern",
    "section": "",
    "url": "https://www.chedong.com/phpMan.php/ri/ActiveSupport%3A%3AConcern/json",
    "generated": "2026-07-25T04:32:34Z",
    "sections": {
        "ActiveSupport::Concern": {
            "content": "(from /home/chedong/.local/share/rdoc)\n------------------------------------------------------------------------\nA typical module looks like this:\n\nmodule M\ndef self.included(base)\nbase.extend ClassMethods\nbase.classeval do\nscope :disabled, -> { where(disabled: true) }\nend\nend\n\nmodule ClassMethods\n...\nend\nend\n\nBy using ActiveSupport::Concern the above module could instead be\nwritten as:\n\nrequire \"activesupport/concern\"\n\nmodule M\nextend ActiveSupport::Concern\n\nincluded do\nscope :disabled, -> { where(disabled: true) }\nend\n\nclassmethods do\n...\nend\nend\n\nMoreover, it gracefully handles module dependencies. Given a Foo module\nand a Bar module which depends on the former, we would typically write\nthe following:\n\nmodule Foo\ndef self.included(base)\nbase.classeval do\ndef self.methodinjectedbyfoo\n...\nend\nend\nend\nend\n\nmodule Bar\ndef self.included(base)\nbase.methodinjectedbyfoo\nend\nend\n\nclass Host\ninclude Foo # We need to include this dependency for Bar\ninclude Bar # Bar is the module that Host really needs\nend\n\nBut why should Host care about Bar's dependencies, namely Foo? We could\ntry to hide these from Host directly including Foo in Bar:\n\nmodule Bar\ninclude Foo\ndef self.included(base)\nbase.methodinjectedbyfoo\nend\nend\n\nclass Host\ninclude Bar\nend\n\nUnfortunately this won't work, since when Foo is included, its base is\nthe Bar module, not the Host class. With ActiveSupport::Concern, module\ndependencies are properly resolved:\n\nrequire \"activesupport/concern\"\n\nmodule Foo\nextend ActiveSupport::Concern\nincluded do\ndef self.methodinjectedbyfoo\n...\nend\nend\nend\n\nmodule Bar\nextend ActiveSupport::Concern\ninclude Foo\n\nincluded do\nself.methodinjectedbyfoo\nend\nend\n\nclass Host\ninclude Bar # It works, now Bar takes care of its dependencies\nend\n\n=== Prepending concerns\n\nJust like include, concerns also support prepend with a corresponding\nprepended do callback. module ClassMethods or classmethods do are\nprepended as well.\n\nprepend is also used for any dependencies.\n------------------------------------------------------------------------",
            "subsections": []
        },
        "Instance methods:": {
            "content": "classmethods\nincluded\nprepended\n",
            "subsections": []
        }
    },
    "flags": [],
    "examples": [],
    "see_also": []
}