说到这个,我总是脑抽筋。我正在创建一个模块来混合到类似模型的类中,但它需要为每个类保留一份可序列化属性的副本。所以这是代码(不起作用)。
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
我纠结的是两件事:
- 如何定义我的混入,使类变量神奇地出现;和
- 如何在我的
ClassMethods
模块和模块的(因为没有更好的术语)实例方法部分中访问该变量。
请注意,我选择了一种混合技术而不是继承,因为我将拥有Validatable
,Persistable
等等Serializable
。此外,我知道有各种可用的验证和持久层,它们经过了良好的测试和大量使用。这是一个不同的野兽,我真的应该知道谁在我的睡眠中这样做,对吧?
任何可以帮助我理解如何执行此操作或建议解决此问题的不同方向的 Ruby 向导,我感谢您的帮助!