我想为序列化程序创建自定义帮助程序,就像标准attributes
一样。
这样做的原因是因为在我的序列化程序中我有此方法
def version
@version ||= PaperTrail.serializer.load(object.object)
end
我的大多数序列化程序属性都遵循以下模式:
attributes :has_foo
def has_foo
version["has_foo"]
end
我没有在ActiveModelSerializer的文档说明中找到有关如何创建类似dsl的自定义方法的信息。假设我想称其为version_attributes
如果可以使用delegate
来做到这一点,我很乐意(不知道该怎么办...)
我找到并正在使用的一项解决方法是我这样做了
class MySerializer < ActiveModel::Serializer
def self.version_attributes(*attrs)
attrs.each do |attr|
define_method attr do
self.send(:version)[attr.to_s]
end
end
end
attributes :has_foo, :has_bar
version_attributes :has_foo, :has_bar
def version
@version ||= PaperTrail.serializer.load(object.object)
end
end
但是我不喜欢必须两次声明has_foo
和has_bar
...
我看到了这个really old issue,但是到具有代码的要点的链接不再存在...