child!
を使うと配列の要素としてハッシュを差し込むことができる。
json.users do json.child! do json.name "James F. Cameron" end end #=> { "users": [{ "name": "James F. Cameron" }] }
しかしブロックの中でchild!
が呼ばれないと、そこは勝手に空のハッシュになってしまう。
json.users do end #=> { "users": {} }
こうなるとusers
キーに対する型が変わってしまうため、JSONのパースに成功してもそのあとの処理に失敗してしまいかねない。
次のようにすると要素が空の場合に空の配列を返すことができる。
json.users do json.array! [] if json.attributes!.empty? end #=> { "users": [] }