Jbuilder有条件生成空键

时间:2014-12-16 14:27:11

标签: ruby-on-rails json

这是我的public.json.jbuilder

json.(@plantao, :data_referencia, :data_fim)

json.plantoes_locais @plantao.plantao_lotacoes do |plantao_local|

  json.plantao_local(plantao_local,
    :periodo_inicio, :periodo_fim, :servidor, :lotacao, :contato
  ) if plantao_local.dentro_periodo?

end

生成我的JSON时,由于我的条件

,在文件末尾会生成几个空{}
{
  "data_referencia": "2014-12-15T18:00:00.000-02:00",
  "data_fim": "2014-12-18T08:00:00.000-02:00",
  "plantoes_locais": [
    {
      "plantao_local": {
        "periodo_inicio": "2014-12-16T08:00:00.000-02:00",
        "periodo_fim": "2014-12-17T08:00:00.000-02:00",
        "servidor": null,
        "lotacao": null,
        "contato": null
      }
    },
    {
      "plantao_local": {
        "periodo_inicio": "2014-12-16T08:00:00.000-02:00",
        "periodo_fim": "2014-12-17T08:00:00.000-02:00",
        "servidor": null,
        "lotacao": null,
        "contato": null
      }
    },
    {},
    {},
    {},
    {},
    {},
    {},
    {},
    {}
  ]
}

如何删除这些空{}?

2 个答案:

答案 0 :(得分:3)

Jbuilder github页面说你可以使用:

json.ignore_nil!

source

答案 1 :(得分:2)

使用delete_if()empty?删除空哈希。这样的事情应该有效:

json.(@plantao, :data_referencia, :data_fim)

json.plantoes_locais @plantao.plantao_lotacoes do |plantao_local|

  json.plantao_local(plantao_local,
    :periodo_inicio, :periodo_fim, :servidor, :lotacao, :contato
  ) if plantao_local.dentro_periodo?

end.delete_if(&:empty?)