これに関しては、私はいつも脳痙攣を起こします。モデルのようなクラスに混在させるモジュールを作成していますが、クラスごとにシリアル化可能な属性のコピーを 1 つだけ保持する必要があります。だからここにコードがあります(それは動作しません)。
module Checkin
module Model
def self.included(base)
base.extend(ClassMethods)
end
@@serialiable_attrs = [] <== really not the right place
module ClassMethods
def serializable(*attrs)
attrs.each{|attr| @@serializable_attrs << attr} # Is this @@ or just @?
end
end
def serialize!
@@serializable_attrs.each{|a| do_something_with(a)} # <== Will this work?
end
end
end
class Person
include Checkin::Model
serializable :first_name, :original_name, :last_name, :checked_in, :people_attending
# etc., etc.
end
私が論争しているのは2つのことです:
- クラス変数が魔法のように存在するようにミックスインを定義する方法。と
- 私の
ClassMethods
モジュールと(より良い用語がないため)モジュールのインスタンスメソッド部分の両方でその変数にアクセスする方法。
、などがあるためValidatable
、継承ではなくミックスイン手法に落ち着いたことに注意してください。また、十分にテストされ、頻繁に使用されている、あらゆる種類の検証レイヤーと永続化レイヤーが利用可能であることも知っています。これは別の獣であり、睡眠中に誰がこれを行うべきかを本当に知っておく必要がありますよね?Persistable
Serializable
これを行う方法を理解するのを手伝ってくれたり、この問題にアプローチするための別の方向性を提案してくれたりする Ruby ウィザードがあれば、助けに感謝します!