任務是讓管理 modules 之間的 dependencies 變得容易。
也可以用 include 同時達成 class methodsinstance methods
(原本必須 include + extend 才能達成)
原本作法
12345678910111213141516171819
# app/models/concerns/sample.rbmoduleSample# self.included 會在 Sample 被 include 時執行# base 傳入是誰哪個 Class include 了這個 moduledefself.included(base)base.class_evaldo# 用 class_eval 在該 class 新增 Class method#scope :disabled, -> { where(disabled: true) } 可以定義 scope#has_many :post 可以定義關聯puts("base is #{base}")defself.foo"這裡是 class 的 method"endendenddefbar"這裡是 instance 的 method"endend
12345678910
#app/models/test.rbclassTestincludeSampleendTest.foo=>"這裡是 class 的 method"Test.new.bar=>"這裡是 instance 的 method"