如何使用JBuilder从数组中完全删除空元素

时间:2014-08-27 17:03:37

标签: ruby-on-rails ruby jbuilder

使用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!的输出视为普通的数组,然后将compactreject元素视为我不想要的?

2 个答案:

答案 0 :(得分:2)

我认为您可以首先在用户上使用reject来避免使用您的用例,并且只将有效用户添加到数组中:

json.array! @users.reject { |user| user.address.nil? }.each do |user|
  json.name user.name
  json.address user.address
end

答案 1 :(得分:0)

也许您可以尝试select代替each,它只会为非零元素返回一个值

json.array! @users.select do |user|
  unless user.address.nil?
    json.name user.name
    json.address user.address
  end
end