# Rails 5 issue with nested schema

**URL:** <https://discourse.dry-rb.org/t/rails-5-issue-with-nested-schema/777>\
**Category:** Support\
**Created:** [May 7, 2019, 10:27am UTC](https://discourse.dry-rb.org/t/rails-5-issue-with-nested-schema/777 "2019-05-07T10:27:14Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![JulienItard](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.dry-rb.org/julienitard/32/376_2.png) [@JulienItard](https://discourse.dry-rb.org/u/JulienItard)\
**Post date:** [May 7, 2019, 10:27am UTC](https://discourse.dry-rb.org/t/rails-5-issue-with-nested-schema/777/1 "2019-05-07T10:27:14Z")

</div>

Hello,

i’m upgrading my 4.2 rails to 5.0. I use dry-validation 0.13.1.

I have a `Dry::Validation.Params` schema with nested schema like `optional(:my_param).schema do ...`. It is expecting an Array or Hash, but now Rails 5 params/sub-params returns `ActionController::Parameters` instead of an Hash.

The error `must be an Hash` is raised.

Am i missing something ?

Thanks a lot !

Julien

---

<div class="post-metadata">

**Author:** ![waiting-for-dev](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.dry-rb.org/waiting-for-dev/32/71_2.png) [@waiting-for-dev](https://discourse.dry-rb.org/u/waiting-for-dev)\
**Post date:** [May 7, 2019, 5:02pm UTC](https://discourse.dry-rb.org/t/rails-5-issue-with-nested-schema/777/2 "2019-05-07T17:02:54Z")

</div>

You can call [#to\_hash](https://edgeapi.rubyonrails.org/classes/ActionController/Parameters.html#method-i-to_hash) and feed it into `Dry::Validation`.

---

<div class="post-metadata">

**Author:** ![JulienItard](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.dry-rb.org/julienitard/32/376_2.png) [@JulienItard](https://discourse.dry-rb.org/u/JulienItard)\
**Post date:** [May 7, 2019, 5:18pm UTC](https://discourse.dry-rb.org/t/rails-5-issue-with-nested-schema/777/3 "2019-05-07T17:18:28Z")

</div>

Yes i tried it, but it needs to call `.permit` first. I cant because my fields are dynamics, i cant know in advance. I cant use `permit` … so no to\_hash

---

<div class="post-metadata">

**Author:** ![waiting-for-dev](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.dry-rb.org/waiting-for-dev/32/71_2.png) [@waiting-for-dev](https://discourse.dry-rb.org/u/waiting-for-dev)\
**Post date:** [May 7, 2019, 8:41pm UTC](https://discourse.dry-rb.org/t/rails-5-issue-with-nested-schema/777/4 "2019-05-07T20:41:56Z")

</div>

Sorry, right now I have Rails behaviour a bit forgotten. But, if you are sanitizing with `Dry::Validation` I don’t see why you have to sanitize again with `permit`. You can just permit everything, call `#to_hash` and then sanitize with `Dry:: Validation`.

---

<div class="post-metadata">

**Author:** ![cpgo](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.dry-rb.org/cpgo/32/81_2.png) [@cpgo](https://discourse.dry-rb.org/u/cpgo)\
**Post date:** [May 7, 2019, 11:20pm UTC](https://discourse.dry-rb.org/t/rails-5-issue-with-nested-schema/777/5 "2019-05-07T23:20:15Z")

</div>

I belive you can use [to\_unsafe\_hash](https://api.rubyonrails.org/classes/ActionController/Parameters.html#method-i-to_unsafe_h).

---

<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:** [May 8, 2019, 6:25pm UTC](https://discourse.dry-rb.org/t/rails-5-issue-with-nested-schema/777/6 "2019-05-08T18:25:34Z")

</div>

What cpgo wrote is correct, you need to get back a normal hash from the strong params wrapper object, which is exactly what `to_unsafe_hash` does. This is fine (despite the name), since you’re going to validate/sanitize it using `dry-validation` anyway.

---

<div class="post-metadata">

**Author:** ![JulienItard](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.dry-rb.org/julienitard/32/376_2.png) [@JulienItard](https://discourse.dry-rb.org/u/JulienItard)\
**Post date:** [May 9, 2019, 12:53pm UTC](https://discourse.dry-rb.org/t/rails-5-issue-with-nested-schema/777/7 "2019-05-09T12:53:50Z")

</div>

[to\_unsafe\_hash](https://api.rubyonrails.org/classes/ActionController/Parameters.html#method-i-to_unsafe_h) works. Thanks all 🙂
