首页 > 解决方案 > 如何在 ActiveModel:Serializer 中调用对象

问题描述

我正在使用 Active Model Serializer gem 来序列化 json 对象。

如果字段 B 的值与条件匹配,我想显示字段 A。

但字段 A 是私人信息。因此,以前的开发人员编写了一个自定义函数调用“authenticated_belongs_to”并在 ActiveModel:Serializer 中使用它

问题是我不能直接调用对象来获取字段 B

authenticated_belongs_to :item, serializer: ItemOwnerSerializer if object.B

上面的代码给我一个错误,因为未定义的对象

我也尝试通过一种方法获取对象值

authenticated_belongs_to :item, serializer: ItemOwnerSerializer if condition_method

def condition_method
  object.B
end

但是上面的代码不起作用,因为它给了我一个错误 unknowed condition_method

我已经尝试了一整天来找出解决方案,但我只是浪费我的时间。有人可以帮忙吗?

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

解决方案


根据ActiveModel::Serializer 文档

ifor选项可以unless使属性成为条件属性。它采用序列化程序上的方法名称符号或 lambda 文字。

因此,您应该将代码更改为:

authenticated_belongs_to :item, serializer: ItemOwnerSerializer if :condition_method

推荐阅读