首先,假设我对 Ruby 对象模型的理解非常不完整,我来自 C、PHP 和 Java。
现在,我的应用程序包含由多个模型共享的功能,因此我试图将该功能移动到一个模块中以保持干燥。每个模型都有一个需要序列化的“数据”属性。但是,当我将serialize
调用移动到模块中时,我无法使其工作。这是基本模型:
class MyModel < ActiveRecord::Base
include MyApp::Data
end
这是模块:
module MyApp
module Data
serialize :data, ActiveRecord::Coders::Hstore
def get_data(key)
data && data[key]
end
def set_data(key, value)
self.data = (data || {}).merge(key => value)
end
end
end
当我尝试实例化包含 的模型时,MyApp:Data
出现以下错误:
NoMethodError: undefined method `serialize' for MyApp::Data:Module
我如何使它在我实例化时MyModel
,data
通过简单地包含来序列化属性MyApp::Data
?
编辑:
我也试过这个:
module MyApp
module Data
def self.included(base)
base.extend(ClassMethods)
end
module ClassMethods
serialize :data, ActiveRecord::Coders::Hstore
end
def get_data(key)
data && data[key]
end
def set_data(key, value)
self.data = (data || {}).merge(key => value)
end
end
end
不幸的是,我仍然遇到同样的错误。