2016-12-05 1 views
1

Ich baue ein Modul wie das folgende, aber ich erhalte einen 'undefinierten Methode' Fehler beim Methodenaufruf von self.attributes. Ich bin sicher, ich vermisse etwas Einfaches, kann es aber nicht sehen. Jede Anleitung würde sehr geschätzt werden!Erhalte die Werte der Attribute eines Objekts aus den Modulmethoden

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

Wo ist die 'attributes' Methode definiert? –

+0

Ich denke, die Attributsmethode ist in der ActiveRecord-Klasse definiert, obwohl ich dies nicht bestätigen konnte. Ich weiß, wenn Sie ein ActiveRecord-Objekt instanziieren, dann ist Attribute eine Instanzmethode für das Objekt. Hilft das? –

+0

Ich denke, es sollte 'base.include (InstanceMethods)' als 'extend' werden diese Klassenmethoden (wie Sie mit ClassMethods tun) und' attributes' ist keine Klassenmethode. – engineersmnky

Antwort

0

mehr über Ihr Feedback Denken, fand ich meine Lösung von base.extend(InstanceMethods) zu base.include(InstanceMethods) ändern, wie vorgeschlagen. Die Instanzmethoden waren dann für die instanziierten Objekte verfügbar. Dann habe ich einfach die problematischen Klassenmethoden in Instanzmethoden geändert. Vielen Dank!

Verwandte Themen