0

Ruby on Rails 3.2.2 を使用しています。モデル クラスの Mixin モジュールを実装しましたが、参照するArticleようにしたいと思います(たとえば、メソッドのコンテキスト外で記述されている場合でも)。つまり、私は次のことをしようとしています:selfArticle

module MyModule
  extend ActiveSupport::Concern

  # Note: The following is just a sample code (it doesn't work for what I am 
  # trying to accomplish) since 'self' isn't referring to Article but to the
  # MyModule itself.
  include MyModule::AnotherMyModule if self.my_article_method?

  ...
end

上記のコードは、次のエラーを生成します。

undefined method `my_article_method?' for MyModule

(または他の何か)がモデルクラスを参照するmy_article_method?ように、上記で実行するにはどうすればよいですか?selfArticle

4

2 に答える 2

3

self.includedフックを使用できます:

def self.included(klass)
  klass.include MyModule::AnotherMyModule if klass.my_article_method?
end

むしろ、実際のArticleクラスにロジックを配置したいと思います。モジュールは、含まれているクラスについて知る必要はありません。

class Article
  include MyModule
  include MyModule::AnotherModule if self.my_article_method?
end
于 2012-09-28T13:10:53.957 に答える
0

代わりにConcernのメソッドを使用してください:included

module MyModule
  extend ActiveSupport::Concern

  included do
    include MyModule::AnotherModule if self.my_article_method?
  end
end
于 2012-09-28T13:22:57.473 に答える