2012-04-18 16 views
1

私はActiveRecordにメソッドを追加する私の最初のRails gemを書いています。私はActiveRecordに追加するメソッドの中から他のメソッドを呼び出す簡単な方法を理解できないようです。私が使用すべきパターンがありますか?あなたはインスタンス方法としてクラス(同等に、ClassオブジェクトActiveRecord::Baseのインスタンスメソッド)法、およびsome_utility_methodとしてmy_class_methodを持つことになりますMyModuleActiveRecord::Baseを含めたらRubyモジュール内の他のメソッドへのアクセス

module MyModule 

    def self.included(base) 
    base.extend(ClassMethods) 
    end 

    module ClassMethods 

    def my_class_method 
     # This doesn't work 
     some_utility_method 
    end 

    end 

    def some_utility_method 
    # Do something useful 
    end 

end 

ActiveRecord::Base.send(:include, MyModule) 

答えて

3

ので、my_class_method内、selfクラスActiveRecord::Baseではなく、そのクラスのインスタンスです。

module MyModule 

    def self.included(base) 
    base.extend(ClassMethods) 
    end 

    module ClassMethods 

    def my_class_method 
     # This doesn't work 
     MyModule::some_utility_method 
    end 

    end 

    def self.some_utility_method 
    # Do something useful 
    end 

end 

ActiveRecord::Base.send(:include, MyModule) 
+0

私が考えたものであること:あなたがモジュールにプライベートユーティリティメソッドをしたい場合、あなたはこのようにそれを行うことができ :それはsome_utility_method

可能な方法として、[編集]を持っていません。だから...どのようにクラスのメソッドからモジュール内の他のメソッドを利用していますか?私は機能をより小さなチャンクに分割したいが、1つのクラスメソッドをActiveRecordに公開したいだけである。 –

+0

@MattFordham - Ah、ok。その中で解決策を編集したのですか? – Chowlett

+0

優秀、ちょうど私が必要としたもの。ありがとう! –

関連する問題