2016-12-05 16 views
1

私は以下のようなモジュールを構築していますが、self.attributesメソッド呼び出しで「未定義のメソッド」エラーが発生しています。私は何かシンプルなものが見当たりませんが、それを見ることはできません。どんな指導も大歓迎です!あなたのフィードバックについてもっと考えるモジュールのメソッドからオブジェクトの属性の値を取得

module TestModule 
    def self.included(base) 
    base.extend(ClassMethods) 
    base.extend(InstanceMethods) 
    end 

    module InstanceMethods 

    def mon_mothma 
     self.attributes.each do |key, value| 
     admiral_ackbar(key) 
     end 
    end 

    end 

    module ClassMethods 

    def admiral_ackbar(key) 
     self.send("#{key}=", value) 
    end 

    end 

end 

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

'attributes'メソッドはどこに定義されていますか? –

+0

私はそれを確認することができませんでしたが、私は属性のメソッドがActiveRecordクラスで定義されていると思う。 ActiveRecordオブジェクトをインスタンス化すると、属性はオブジェクトのインスタンスメソッドになります。それは役に立ちますか? –

+0

'extends'が(ClassMethodsでやっているような)これらのクラスメソッドを作るので、' base.include(InstanceMethods) 'でなければならないと思います。' attributes'はクラスメソッドではありません。 – engineersmnky

答えて

0

、私が示唆したようにbase.include(InstanceMethods)base.extend(InstanceMethods)を変更することで、私の解決策を見つけました。インスタンスメソッドは、インスタンス化されたオブジェクトで使用できました。その後、面倒なクラスメソッドをインスタンスメソッドに変更しました。本当にありがとう!

関連する問題