I have the following three models (Rails 2.3.8)
class Outbreak < ActiveRecord::Base
has_many :incidents, :dependent => :destroy
has_many :locations, :through => :incidents
accepts_nested_attributes_for :incidents, :allow_destroy => true
accepts_nested_attributes_for :locations, :allow_destroy => true, :reject_if => proc { |attrs| attrs.all? { |k, v| v.blank? } }
end
class Incident < ActiveRecord::Base
belongs_to :outbreak
belongs_to :location
end
class Location < ActiveRecord::Base
has_many :incidents
has_many :outbreaks, :through => :incidents
accepts_nested_attributes_for :incidents, :allow_destroy => true
end
The parameters from the form seem to be ok
“outbreak”=>{
“locations_attributes”=>{“0″=>{“lon”=>”-1.39″, “placename”=>”wetwe”, “hpu_id”=>”15”, “postcode”=>”so1 1aa”, “region_id”=>”10”, “address_1″=>””, “town”=>”Bargate”, “address_2″=>””, “address_3″=>””, “lat”=>”50.89”}},”incidents_attributes”=>{“0″=>{“subtype_id”=>”7”, “category_id”=>”1”, “detail”=>””, “subcategory_id”=>”2”}}
}
But when the Outbreak is saved 3 rows are created in the Incidents table (the join table) and a single row in the Outbreak and Location tables.
The rows in the Incidents table are not fully populated from the params as follows:
id outbreak_id location_id category_id subcategory_id subtype_id detail created_at updated_at
57 23 NULL 1 2 7 2010-11-25 14:45:18.385905 2010-11-25 14:45:18.385905
58 23 27 NULL NULL NULL NULL 2010-11-25 14:45:18.39828 2010-11-25 14:45:18.39828
59 23 27 NULL NULL NULL NULL 2010-11-25 14:45:18.403051 2010-11-25 14:45:18.403051
This must be due to the either the format of the parameters or the multiple accepts_nested_attributes_for methods – how do I have just a single row being entered in the Incidents table with all of the parameters information?
Second time so far this week I’ve answered my own question ^^ that’ll teach me to put more effort in before giving up and posting on the net for help,
Still after looking at my original question I didn’t include enough information to answer it properly – the issue (apart from the set up of the models) was down to the Outbreak constructor in the Outbreak controller new method,
Original Outbreaks_controller
Revised Outbreaks_controller
Changes to the three models
This seems to work ok – also posted the create action and main form