0

メソッドの呼び出しでクラス メソッドを動的に追加したいacts_as。私のファイル構造は次のようになります( 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

クラスが を呼び出すときにのみクラス メソッドを宣言できるようにしたいacts_as_foo。インスタンス メソッドは で動作しLocalInstanceMethodsます。最も簡単な方法はモジュールに追加することですが、他のすべてのクラスにもこの方法があります。私はすでにメソッドに追加しようとしていdefine_methodますacts_asが、未定義のメソッドを返します。何か案が ?

4

1 に答える 1

2

extend2番目のサブモジュールを作成して代わりに使用するだけでよいと思います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
于 2015-04-16T09:03:46.233 に答える