如何在运行时使ActiveModel :: Serializer属性可选?

Nat*_*nna 5 ruby ruby-on-rails active-model-serializers

我试图允许API请求指定要在对象上返回的字段.我只能使用指定的字段检索对象,但是当它被序列化时,它会抛出一个错误:

ActiveModel::MissingAttributeError (missing attribute: x)
Run Code Online (Sandbox Code Playgroud)

如何实现此功能ActiveModel::Serializer并且可能吗?

rob*_*woc 5

我在寻找从 json 响应中删除可选字段的好方法时发现了这个问题。

gemactive_model_serializers确实有一个解决方案。您只需要将条件传递给attribute序列化程序声明中的方法。

class MySelectiveSerializer < ActiveModel::Serializer
  attributes :id, :anything
  attribute :something, if: -> { object.something.present? }
end
Run Code Online (Sandbox Code Playgroud)

也许 3 年前,这样的解决方案并不存在,但现在可以使用了。:)

干杯。


dro*_*lot 2

您可以从序列化程序中删除属性,但它们应该存在。

class SomeSerializer < ActiveModel::Serializer
  attributes :something

  def attributes
     super.except(:something) if something
   end
end
Run Code Online (Sandbox Code Playgroud)