Edit: Added update action and on which line the error occurs
Model:
class Match < ActiveRecord::Base has_and_belongs_to_many :teams has_many :match_teams has_many :teams, :through => :match_teams accepts_nested_attributes_for :match_teams, :allow_destroy => true end
Controller:
def new @match = Match.new @match_teams = 2.times do @match.match_teams.build end respond_to do |format| format.html
Nested Model:
class MatchTeam < ActiveRecord::Base belongs_to :match belongs_to :team end
Association:
class Team < ActiveRecord::Base has_and_belongs_to_many :matches end
View:
<%= form_for(@match) do |f| %> <%= f.fields_for :match_teams, @match_teams do |builder| %> <%= builder.collection_select :team_id, Team.all, :id, :name, :include_blank => true %> <% end %> <% unless @match.new_record? %> <div class="field"> <%= f.label :winning_team_id %><br /> <%= f.collection_select :winning_team_id, @match.teams, :id, :representation %> </div> <% end %> <div class="actions"> <%= f.submit %> </div> <% end %>
Params:
Processing by MatchesController#update as HTML Parameters: {"utf8"=>"รยฃรด", "authenticity_token"=>"QIJChzkYOPZ1hxbzTZS8H3AXc7i BzkKv3Z5daRmlOsQ=", "match"=>{"match_teams_attributes"=>{"0"=>{"team_id"=>"1", " id"=>""}, "1"=>{"team_id"=>"3", "id"=>""}}, "winning_team_id"=>"3"}, "commit"=>" Update Match", "id"=>"2"}
Creating a new match with two teams works fine, the edit view also shows the correct values, but the update action gives me this error.
undefined method `to_sym' for nil:NilClass app/controllers/matches_controller.rb:65:in `block in update' line 65: if @match.update_attributes(params[:match])