我有模型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
答案 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合理使用它。