まず、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
残念ながら、まだ同じエラーが発生しています。