为自定义 acts_as 添加 class 方法

Add class methods for custom acts_as

我想在调用 acts_as 方法时动态添加 class 方法。我的文件结构如下所示(取自 http://guides.rubyonrails.org/plugins.html):

module ActsAsFoo
  extend ActiveSupport::Concern

  included do
  end

  module ClassMethods
    def acts_as_foo(options = {})
      include ActsAsFoo::LocalInstanceMethods
    end
  end

  module LocalInstanceMethods
    def instance_method
      # This method works without any issue
    end
  end
end

class Bar
  acts_as_foo
end

我希望能够在 class 调用 acts_as_foo 声明 class 方法。实例方法适用于 LocalInstanceMethods。最简单的方法是添加到模块中,但我所有其他 classes 也有这种方法。我已经尝试将 define_method 添加到 acts_as 方法,returns 未定义方法。有什么想法吗?

我认为您只需要创建第二个子模块并使用 extend 而不是 include

module ActsAsFoo
  extend ActiveSupport::Concern

  included do
  end

  module ClassMethods
    def acts_as_foo(options = {})
      extend ActsAsFoo::LocalClassMethods
    end
  end

  module LocalClassMethods
    def class_method
      # class method definition
    end
  end
end

class Bar
  acts_as_foo
end