我的ActiveRecord模型上有序列化数据,我想将某些属性委托给它。像这样:
class Object < AR::Base
serialize :data
delegate :title, to: :data
end
但当然这对哈希不起作用。还有其他方法吗?
我最终想要的是这个。我给ActiveRecord模型一个符号列表:
[ :title, :size, :color ]
他们会像以下一样转变为吸气剂和制定者:
def title
data[:title]
end
def title=(val)
data[:title]= val
end
它们与其他AR属性相邻:
#<Model id: 21, title: "Foo", size: 4, color: nil>
答案 0 :(得分:3)
您正在寻找store
:
class User < ActiveRecord::Base
store :settings, accessors: [ :color, :homepage ]
end
u = User.new(color: 'black', homepage: '37signals.com')
u.color # Accessor stored attribute
u.settings[:country] = 'Denmark' # Any attribute, even if not specified with an accessor
答案 1 :(得分:1)
您可以使用常规method_missing:
def method_missing(m, *args, &block)
if delegates.include?(m)
return data[m]
end
super(m, *args, &block)
end
将为对象上不存在的每个方法调用method missing,以便您可以查看该方法是否是您要委派的方法之一。