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

Rob*_*ron 5 ruby ruby-on-rails jbuilder

使用JBuilder时,如何从输出中完全删除空数组元素的证据?对于此代码示例,假设我们有三个用户,第三个用户有一个nil地址:

json.array! @users.each do |user|
  unless user.address.nil?
    json.name user.name
    json.address user.address
  end
end
Run Code Online (Sandbox Code Playgroud)

生成的JSON是:

[
  {
    "name":"Rob",
    "address":"123 Anywhere St."
  },
  {
    "name":"Jack",
    "address":"123 Anywhere St."
  },
  {}
]
Run Code Online (Sandbox Code Playgroud)

看到最后一个,{}那里到底是空的.因此,只要块传递给array!返回,nil我最终会在数组中使用空元素,而不是缺少元素.有没有简单的方法告诉JBuilder不输出那些?或者我只需要将输出array!视为一个简单的数组然后compact或者reject我不想要的元素?

Uri*_*ssi 2

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

json.array! @users.reject { |user| user.address.nil? }.each do |user|
  json.name user.name
  json.address user.address
end
Run Code Online (Sandbox Code Playgroud)