【问题标题】:Apply method to all attributes using active_model_serializers使用 active_model_serializers 将方法应用于所有属性
【发布时间】:2015-12-28 20:40:11
【问题描述】:

使用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

【问题讨论】:

    标签: ruby-on-rails active-model-serializers rails-api serialization


    【解决方案1】:

    我认为您可以使用元编程来生成您需要的所有方法,例如:

    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
    

    【讨论】:

    • 我使用了第一种方法,效果很好,谢谢。保存了很多行代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    相关资源
    最近更新 更多