# How do I build an array of objects from my params?

**URL:** <https://www.ruby-forum.com/t/how-do-i-build-an-array-of-objects-from-my-params/145309>\
**Category:** Rails\
**Created:** [August 7, 2008, 7:59pm UTC](https://www.ruby-forum.com/t/how-do-i-build-an-array-of-objects-from-my-params/145309 "2008-08-07T19:59:58Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [August 7, 2008, 7:59pm UTC](https://www.ruby-forum.com/t/how-do-i-build-an-array-of-objects-from-my-params/145309/1 "2008-08-07T19:59:58Z")

</div>

Hi,

I have a form model which has\_many form\_item objects. How do I build  
a new form model from these objects? This call

```
            @form = Form.new(:user_id => session[:user_id],
                             :form_items => params[:form_items])

```

is giving me the error, “ActiveRecord::AssociationTypeMismatch in  
FormsController#create – FormItem expected, got  
HashWithIndifferentAccess”. request passed in is

{“commit”=\>“Submit Form”,  
“form\_items”=\>[{“description”=\>“aaa”,  
“prescription\_number”=\>“111”,  
“day\_supply”=\>“234”}]}

Below is the partial I’m using to collect form\_item data:

\<% fields\_for “form[form\_item\_attributes][]”, form\_item do |  
form\_item\_form| %\>

\<% @form\_item = form\_item %\> \<%= error\_messages\_for :form\_item %\> ... table data \<%= text\_field\_tag "form\_items[] [prescription\_number]", form\_item.prescription\_number, "size" =\> 15 %\> \<%= text\_field\_tag "form\_items[#{form\_item.id}][description]", form\_item.description, "size" =\> 15 %\> \<%= text\_field\_tag "form\_items[#{form\_item.id}][day\_supply]", form\_item.day\_supply, "size" =\> 15 %\> ... more table data \<% end %\>

Thanks for your help, - Dave

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [August 8, 2008, 11:46am UTC](https://www.ruby-forum.com/t/how-do-i-build-an-array-of-objects-from-my-params/145309/2 "2008-08-08T11:46:12Z")

</div>

On 7 Aug 2008, at 18:59, removed\_email\_address@domain.invalid wrote:

> FormsController#create – FormItem expected, got  
> HashWithIndifferentAccess". request passed in is

Right now, you’re going to have to iterate over params[:form\_items]  
creating activerecord objects as you go.

Fred

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [August 8, 2008, 1:05pm UTC](https://www.ruby-forum.com/t/how-do-i-build-an-array-of-objects-from-my-params/145309/3 "2008-08-08T13:05:21Z")

</div>

You posted this same thing on the rails forum. Please do not cross post.

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [August 9, 2008, 3:40pm UTC](https://www.ruby-forum.com/t/how-do-i-build-an-array-of-objects-from-my-params/145309/4 "2008-08-09T15:40:30Z")

</div>

Maybe he wasn’t getting an answer? I don’t frequent the rails forum  
and had I known the answer the only way I could have helped would have  
been answering this post.

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [August 11, 2008, 9:07pm UTC](https://www.ruby-forum.com/t/how-do-i-build-an-array-of-objects-from-my-params/145309/5 "2008-08-11T21:07:04Z")

</div>

Sorry about that. You were perfectly clear, don’t know why I missed  
previous posting. Anyway this is the code I used that worked for  
me …

```
            form_items_arr = Array.new
            for form_item in params[:form_items]
                    form_item_obj = FormItem.new(form_item)
                    form_items_arr.push(form_item_obj)
            end
            @form = Form.new(:user_id => session[:user_id],
                             :form_items => form_items_arr)

```

All the best, - Dave

I’m getting an internal server error in my logs, saying

Status: 500 Internal Server Error  
Conflicting types for parameter containers. Expected an instance of  
Hash but found an instance of Array. This can be caused by colliding  
Array and Hash parameters like qs[]=value&qs[key]=value.

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [August 11, 2008, 9:31pm UTC](https://www.ruby-forum.com/t/how-do-i-build-an-array-of-objects-from-my-params/145309/6 "2008-08-11T21:31:09Z")

</div>

Hi, you should be able to do the following:  
form\_items\_arr = Array.new( params[:form\_items] )  
@form = Form.new(:user\_id =\> session[:user\_id],  
:form\_items =\> form\_items\_arr)

Good luck,

-Conrad

On Mon, Aug 11, 2008 at 12:06 PM, removed\_email\_address@domain.invalid \<

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [August 11, 2008, 10:42pm UTC](https://www.ruby-forum.com/t/how-do-i-build-an-array-of-objects-from-my-params/145309/7 "2008-08-11T22:42:40Z")

</div>

On 11 Aug 2008, at 20:06, removed\_email\_address@domain.invalid wrote:

> Sorry about that. You were perfectly clear, don’t know why I missed  
> previous posting. Anyway this is the code I used that worked for  
> me …
> 
> ```
> form_items_arr = Array.new
> for form_item in params[:form_items]
> form_item_obj = FormItem.new(form_item)
> form_items_arr.push(form_item_obj)
> end
> 
> ```

You can be slightly more concise: form\_items\_arr =  
params[:form\_items].collect {|attrs| FormItem.new attrs}

Fred
