使用JBuilder时,如何从输出中完全删除空数组元素的证据?对于这个代码示例,假设我们有三个用户,第三个用户有一个nil
地址:
json.array! @users.each do |user|
unless user.address.nil?
json.name user.name
json.address user.address
end
end
生成的JSON是:
[
{
"name":"Rob",
"address":"123 Anywhere St."
},
{
"name":"Jack",
"address":"123 Anywhere St."
},
{}
]
看到最后一个,在那里的末尾清空{}
。因此,每当传递给array!
的块返回nil
时,我都会在数组中出现一个空元素,而不是缺少元素。有没有什么简单的方法可以告诉JBuilder不要输出这些?还是我只需要将array!
的输出视为一个普通的ol’数组,然后再处理我不想要的compact
或reject
元素?
我认为您可以通过首先在用户上使用reject
来避免您的用例,并且只将有效用户添加到数组中:
json.array! @users.reject { |user| user.address.nil? }.each do |user|
json.name user.name
json.address user.address
end
也许你可以尝试select
而不是each
,它只会为非零元素返回一个值
json.array! @users.select do |user|
unless user.address.nil?
json.name user.name
json.address user.address
end
end