ActiveModel 序列化器继承
ActiveModel serializer inheritance
假设我有这个序列化程序
class FooSerializer < ActiveModel::Serializer
attributes :this, :that, :the_other
def this
SomeThing.expensive(this)
end
def that
SomeThing.expensive(that)
end
def the_other
SomeThing.expensive(the_other)
end
end
单个序列化值的操作有些昂贵...
然后我有另一个序列化程序可以使用它,但不是 return 所有成员:
class BarSerializer < FooSerializr
attributes :the_other
end
这不起作用...BarSerializer 仍然会有这个、那个和 the_other...
如何利用继承而不自动获取相同的属性?我正在寻找模块混合以外的解决方案。
原来答案是利用魔法include_xxx?方法...
class BarSerializer < FooSerializer
def include_this?; false; end
def include_that?; false; end
end
这将使它只序列化“the_other”
将 BarSerializer
设为父 class 并将方法 the_other
放入其中。 FooSerializer
将仅继承 BarSerializer
.
中定义的方法和属性
假设我有这个序列化程序
class FooSerializer < ActiveModel::Serializer
attributes :this, :that, :the_other
def this
SomeThing.expensive(this)
end
def that
SomeThing.expensive(that)
end
def the_other
SomeThing.expensive(the_other)
end
end
单个序列化值的操作有些昂贵...
然后我有另一个序列化程序可以使用它,但不是 return 所有成员:
class BarSerializer < FooSerializr
attributes :the_other
end
这不起作用...BarSerializer 仍然会有这个、那个和 the_other...
如何利用继承而不自动获取相同的属性?我正在寻找模块混合以外的解决方案。
原来答案是利用魔法include_xxx?方法...
class BarSerializer < FooSerializer
def include_this?; false; end
def include_that?; false; end
end
这将使它只序列化“the_other”
将 BarSerializer
设为父 class 并将方法 the_other
放入其中。 FooSerializer
将仅继承 BarSerializer
.