使用 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
最佳答案
我认为您可以使用元编程来生成您需要的所有方法,例如:
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
关于ruby-on-rails - 使用 active_model_serializers 将方法应用于所有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32876628/