# arrays inside hash is always missing

**URL:** <https://discourse.dry-rb.org/t/arrays-inside-hash-is-always-missing/1634>\
**Category:** dry-validation\
**Created:** [March 23, 2023, 7:38pm UTC](https://discourse.dry-rb.org/t/arrays-inside-hash-is-always-missing/1634 "2023-03-23T19:38:57Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![wilsonhsu0102](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.dry-rb.org/wilsonhsu0102/32/864_2.png) [@wilsonhsu0102](https://discourse.dry-rb.org/u/wilsonhsu0102)\
**Post date:** [March 23, 2023, 7:38pm UTC](https://discourse.dry-rb.org/t/arrays-inside-hash-is-always-missing/1634/1 "2023-03-23T19:38:57Z")

</div>

Hi team,

the project is running

```auto
gem 'dry-configurable', '0.13.0'
gem 'dry-initializer', '3.0.4'
gem 'dry-schema', '1.8.0'
gem 'dry-validation', '1.7.0'

```

I’ve noticed that whenever I put an array inside a hash, it will always end up with a validation error of the array is missing.  
i.g.

```auto
class ValidateContract < Dry::Validation::Contract
  params do
    required(:outerHash).hash do
      required(:innerArray).array(:string)
    end
  end
end

```

Running with example below always give me “innerArray” is missing.

```auto
{
  "outerHash": { "innerArray": ["test1", "test2"] }
}

```

This might be an over-simplified example, but its generally a problem I am facing. Is it syntax error from my end? What is going on here.

---

<div class="post-metadata">

**Author:** ![solnic](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.dry-rb.org/solnic/32/779_2.png) [@solnic](https://discourse.dry-rb.org/u/solnic)\
**Post date:** [March 27, 2023, 7:40am UTC](https://discourse.dry-rb.org/t/arrays-inside-hash-is-always-missing/1634/2 "2023-03-27T07:40:56Z")

</div>

Please upgrade to the latest dry-schema and verify if it’s still a problem there.

---

<div class="post-metadata">

**Author:** ![wilsonhsu0102](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.dry-rb.org/wilsonhsu0102/32/864_2.png) [@wilsonhsu0102](https://discourse.dry-rb.org/u/wilsonhsu0102)\
**Post date:** [March 27, 2023, 2:33pm UTC](https://discourse.dry-rb.org/t/arrays-inside-hash-is-always-missing/1634/3 "2023-03-27T14:33:02Z")

</div>

Upgraded to

```auto
gem 'dry-configurable', '1.0.1'
gem 'dry-initializer', '3.0.4'
gem 'dry-schema', '1.13.0'
gem 'dry-validation', '1.10.0'

```

Still seeing the same thing.

```auto
Response body: {"error_code":"validation_error","error_message":"parameter validation failed","error_fields":[{"field_name":"outerHash","field_error_messages":{"innerArray":["is missing"]}}]}

```

---

<div class="post-metadata">

**Author:** ![solnic](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.dry-rb.org/solnic/32/779_2.png) [@solnic](https://discourse.dry-rb.org/u/solnic)\
**Post date:** [March 29, 2023, 6:56am UTC](https://discourse.dry-rb.org/t/arrays-inside-hash-is-always-missing/1634/4 "2023-03-29T06:56:37Z")

</div>

I can’t reproduce this:

```auto
dry-validation> class ValidateContract < Dry::Validation::Contract
  params do
    required(:outerHash).hash do
      required(:innerArray).array(:string)
    end
dry-validation> class ValidateContract < Dry::Validation::Contract
  params do
    required(:outerHash).hash do
      required(:innerArray).array(:string)
    end
  end
end

=> #<Dry::Schema::Params keys=[{"outerHash"=>["innerArray"]}] rules={:outerHash=>"key?(:outerHash) AND key[outerHash](hash? AND set(key?(:innerArray) AND key[innerArray](array? AND each(str?))))"}>
dry-validation> c = ValidateContract.new
=> #<#<Class:0x000000010581dd40>::ValidateContract schema=#<Dry::Schema::Params keys=[{"outerHash"=>["innerArray"]}] rules={:outerHash=>"key?(:outerHash) AND key[outerHash](hash? AND set(key?(:innerArray) AND key[innerArray](array? AND each(str?))))"}> rules=[]>
dry-validation> h = {
  "outerHash": { "innerArray": ["test1", "test2"] }
}
=> {:outerHash=>{:innerArray=>["test1", "test2"]}}
dry-validation> c.(h)
=> #<Dry::Validation::Result{:outerHash=>{:innerArray=>["test1", "test2"]}} errors={}>

```
