-1

i want to do something like this:

user.items << Item.new(params[:item] , :computer => Computer.new(params[:computer] , :laptop => Laptop.new(params[:laptop])))

But this generates an error "wrong number of arguments (2 for 1)"!

serpent403
  • 803
  • 16
  • 32

1 Answers1

2

What you're doing is actually interpreted as

Item.new(params[:item] , {
  :computer => Computer.new(params[:computer], { 
    :laptop => Laptop.new(params[:laptop])
  })
})

#new expects a hash attribute, and you're giving it two hashes. One solution would be to merge the hashes using Hash#merge.

ksol
  • 11,835
  • 5
  • 37
  • 64
  • Thanks, 'merge' works perfectly... `item = Item.new(params[:item].merge({:computer => Computer.new(params[:computer].merge({:laptop => Laptop.new(params[:laptop])}))}))` – serpent403 Mar 18 '12 at 17:32