如何从as_json结果中排除某些对象

时间:2015-07-14 02:20:55

标签: ruby-on-rails

我有模型File。模型有方法People。在一个控制器中,需要从一些外部条件中获取不是隐藏模型的列表。

hide()

我想,我可以将所需的条件放在重写的# Controller ... def index render json: People.all.as_json end 方法上,但我不知道如何从结果数组中排除隐藏的模型。

我在as_json模型中覆盖as_json方法:

People

然后我为class People def as_json(options) return false if hidden() super(options) end def hidden?() ... # return true or false end ... 数组调用as_json

peoples

我得到了:

peoples.aj_json

但我需要得到数组

[
  false,
  false,
  {...}, # model 1
  {...}, # model 2
]

有没有办法用[ {...}, # model 1 {...} # model 2 ] 执行此操作?或者我必须在模型as_json中创建一个名为hidden_flag的标志,并在向db发出请求时过滤模型?

People

1 个答案:

答案 0 :(得分:1)

这是你正在做的一件非常奇怪的事情。

您在as_json模型上定义了People(这是错误的命名,“people”是复数,模型名称应该是单数),并且您覆盖它以返回false。因此,当您在as_json个对象的数组上调用People时,它会为数组的每个元素返回false

如果在这种情况下需要获取空数组,可以使用clear方法删除所有元素:

peoples.as_json.clear

但是如果你不得不这样做,你的逻辑就会有一些严重的缺陷。

主要帖子编辑后:

一种直接的方法是return nil而不是return false,然后使用compact方法去除nil值。

但是,更好的方法是使用Active Model Serializers之类的东西。这是a good article合理使用它。