5

我必须使用旧版应用程序并且必须重写旧的(PHP 基础)rest api。在旧的 api 中,当一个属性为 null 时,它就变成了一个空字符串。

然而,Rails 只返回一个空值,这会破坏应用程序。重写应用程序不是解决方案(即使这将是最干净的方式)。同样在旧 api 中,其他值是字符串(整数、布尔值、数字)。所以我想知道,如何在不覆盖每个属性的情况下对每个属性执行 to_s。我正在使用活动模型序列化程序。

4

1 回答 1

9

一点元编程应该会有所帮助:

class MySerializer < ActiveModel::Serializer

  [:id, :attr1, :attr2, :attr2].each do |attr|
    # Tell serializer its an attribute
    attribute attr

    # Define a method with the same name as the attribute that calls the
    # underlying object and to_s on the result
    define_method attr do
      object.send(attr).to_s
    end
  end

end
于 2013-11-13T16:28:38.713 回答