使用rails-api/active_model_serializers,可以将方法应用于所有属性吗?
基本上,我想申请
object.zeroed_value(:symbol)
到每个属性,而不必为每个属性编写单独的方法。见例:
class NutritionalSerializer < ActiveModel::Serializer
attributes :calories,
:sodium
def calories
object.zeroed_value(:calories)
end
def sodium
object.zeroed_value(:sodium)
end
# many, many more attributes...
end
&#13;
答案 0 :(得分:3)
我认为您可以使用元编程来生成所需的所有方法,例如:
class NutritionalSerializer < ActiveModel::Serializer
attributes :calories,
:sodium
%i{attr1 attr2 attr3}.each do |attr|
define_method attr do
object.zeroed_value(attr)
end
end
end
此外,您可以覆盖序列化程序的attributes
方法,然后执行以下操作:
class NutritionalSerializer < ActiveModel::Serializer
def attributes
data = super
%i{attr1 attr2 attr3}.each do |attr|
data[attr] = object.zeroed_value(attr)
end
data
end
end