Accepts_nested_attributes_for - issue

Just trying a simple example to try to get nested to work… but can’t
get it! Been 2 days! Please help. VERY SIMPLE controller, view,
models… listed below.

----------------------ERROR
MESSAGE----------------------------------------------------------------------

ActiveRecord::AssociationTypeMismatch in UserController#update_player

Racquet(#38866740) expected, got Array(#20762670)


-----------------MODELS-------------------------------------

class Player < ActiveRecord::Base

has_many :racquets, :dependent => :destroy

accepts_nested_attributes_for :racquets

end

class Racquet < ActiveRecord::Base

 belongs_to :player

end

--------------CONTROLLER-----------------------------

class UserController < ApplicationController

def index
@player = Player.new
@player.racquets.build
end

def update_player
@player = Player.new(params[:player])
@player.save
redirect_to :action => :index
end

end

----------------------- VIEW

<% form_for :player, :url => { :action => :update_player, :id => @player.id } do |f| %>

Name: <%= f.text_field :name %>

Rank: <%= f.text_field :rank %>

<% f.fields_for :racquets do |racquets_form| %>

Racquet Name: <%= racquets_form.text_field :typ %>

<% end %>

<%= f.submit “Submit” %>
<% end %>


This was supposed to be quick practice form to make use of nested
models… and has turned into a nightmare. Can anyone tell my why it
is not working???

Thanks so much,

Shawn

I haven’t tried running your code, but please change:

def update_player
@player = Player.new(params[:player])
@player.save
redirect_to :action => :index
end

to

def update_player
@player = Player.find_by_id(params[:id])
@player.update_attributes(params[:player])
redirect_to :action => :index
end

and give it a shot.

It’s rather unusual to name the action ‘index’ when it shows form for
creating a new object. Why not call it ‘new’ or something like that.
And then the action is named ‘update_player’ when in fact it is
creating a new Player object. Why don’t you name it ‘create’?
I’m sorry for nitpicking but choosing the right names will make your
life easier. (and will raise your chances for getting the answer)

Regarding your question. I usually look at params in such a situation.
You can find request params in webserver log(just scroll console
window where webrick is started) or you can insert a call to
‘debugger’ in the action and start webserver in debug mode (with ‘–
debugger’).

It really helps if you post as much information as possible. In this
particular case your form html (I mean from page source in browser)
and request params would be very helpful. I’m not an expert in nested
forms but it’s probably because you are receiving an array instead of
a hash in a request.

Yes, you are correct. Terrible naming. But was done to try quick
example. I am creating new player so
@cpr it won’t find player because I am in fact creating one. I
know… terrible code.

It seems to be looking for Active Record object and I am passing in
array…

Help!