Got a weird situation with an update put to a controller with a form with nested attributes.
On the data below, I am updating data for both items (‘0’ and ‘1’) in rosters_attributes (in the example below I am updating the ‘name’ attribute to a new value in both cases. What I am stuck on is that ‘1’ gets its data updated, regardless of what field I update, while ‘0’ does not get updated regardless of the field.
However, update_attributes(params[:matchup]) returns true, so there is no error. If the second was not updating I would assume something is wrong in my code in terms of attributes getting assigned to a model, but that does not seem to be the case.
Parameters: {
“matchup”=>
{
“end_date(3i)”=>“19”, “end_date(4i)”=>“16”, “end_date(5i)”=>“46”,
“rosters_attributes”=>
{
“0”=>
{
“name”=>“abc”, “players_rosters_attributes”=>
{
“0”=>{“player_id”=>“1”, “id”=>“65”},
“1”=>{“player_id”=>“2”, “id”=>“66”},
“2”=>{“player_id”=>“3”, “id”=>“67”},
“3”=>{“player_id”=>“4”, “id”=>“68”}
},
“id”=>“17”
},
“1”=>
{
“name”=>“bcd”, “players_rosters_attributes”=>
{
“0”=>{“player_id”=>“3”, “id”=>“69”},
“1”=>{“player_id”=>“2”, “id”=>“70”},
“2”=>{“player_id”=>“7”, “id”=>“71”},
“3”=>{“player_id”=>“8”, “id”=>“72”}
},
“id”=>“18”
}
},
“release_date(1i)”=>“2012”, “release_date(2i)”=>“5”, “release_date(3i)”=>“19”, “release_date(4i)”=>“16”, “end_date(1i)”=>“2012”, “release_date(5i)”=>“46”, “end_date(2i)”=>“5”}, “commit”=>“Update Fantasy matchup”, “authenticity_token”=>“lAOYIXDYqm965eIyAv4/MXZSTgGSsx11DIea0XLGiZo=”, “utf8”=>“✓”, “id”=>“9”}
Also, in the server, I see that the first Roster is loading but does not get its name updated while the second does.
User Load (0.4ms) SELECT users
.* FROM users
WHERE users
.id
= 2 LIMIT 1
UserProfile Load (0.4ms) SELECT user_profiles
.* FROM user_profiles
WHERE (user_profiles
.user_id = 2) LIMIT 1
FantasyMatchup Load (0.3ms) SELECT matchups
.* FROM fantasy_matchups
WHERE fantasy_matchups
.id
= 9 LIMIT 1
SQL (0.1ms) BEGIN
Roster Load (0.3ms) SELECT rosters
.* FROM rosters
WHERE rosters
.id
IN (17, 18) AND (rosters
.matchup_id = 9)
# This does not update but should
PlayersRoster Load (0.3ms) SELECT players_rosters
.* FROM players_rosters
WHERE players_rosters
.id
IN (65, 66, 67, 68) AND (players_rosters
.roster_id = 17)
CACHE (0.0ms) SELECT matchups
.* FROM fantasy_matchups
WHERE fantasy_matchups
.id
= 9 LIMIT 1 SQL (0.7ms) SELECT COUNT() FROM rosters
INNER JOIN bets
ON bets
.roster_id
= rosters
.id
WHERE (rosters
.matchup_id = 9)
CACHE (0.0ms) SELECT matchups
. FROM fantasy_matchups
WHERE fantasy_matchups
.id
= 9 LIMIT 1
CACHE (0.0ms) SELECT COUNT() FROM rosters
INNER JOIN bets
ON bets
.roster_id
= rosters
.id
WHERE (rosters
.matchup_id = 9)# This updates
__PlayersRoster Load (0.4ms) SELECT players_rosters
. FROM players_rosters
WHERE players_rosters
.id
IN (69, 70, 71, 72) AND (players_rosters
.roster_id = 18)
AREL (0.4ms) UPDATE rosters
SET name
= ‘bcd’, updated_at
= ‘2011-05-19 17:12:53’ WHERE rosters
.id
= 18__ SQL (0.8ms) COMMIT
Any ideas, anyone?
Thanks,
David