首页 > 解决方案 > 有没有办法在rails序列化程序中对多个属性应用条件

问题描述

我想知道是否有一种更简单的方法可以在具有多个属性的序列化程序上应用任何条件(如果不够清楚,请提前抱歉),例如:

class AbcSerializer < ActiveModel::Serializer
  attributes :a, :b, :c, if: :condition?

  def condition?
    true
  end
end

这应该根据条件得到所有 a、b 和 c

标签: ruby-on-railsactive-model-serializers

解决方案


这是一种方法:

class AbcSerializer < ActiveModel::Serializer
  attributes :a, :b, :c

  def attributes(*args)
    hash = super
    hash.delete_if { |k, _| %i[a b c].include? k } unless condition?
    hash
  end

  def condition?
    true
  end
end

我尚未对其进行测试,但应该可以使用/不进行细微更改。


推荐阅读