There's an echo in my head

日々のメモ。

jbuilderで`child!`しなかったときに空の配列を返す

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": [] }
このブログに出てくるコードスニペッツは、引用あるいは断りがない限りMITライセンスです。