2016-12-05 3 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

Я думаю, что это должно быть 'base.include (InstanceMethods)' как 'extend' будет делать эти методы класса (например, вы делаете с ClassMethods), а' attributes' не является методом класса. – engineersmnky

ответ

0

Думая больше о вашей обратной связи, я нашел свое решение путем изменения base.extend(InstanceMethods) к base.include(InstanceMethods) как это было предложено. Затем экземпляры экземпляров были доступны для экземпляров объектов. Затем я просто изменил проблемные методы класса на методы экземпляра. Спасибо!

Смежные вопросы