this line was the problem.. @household = Household.new(params[:household])
it was saving the people records because they were linked to household, so a later @household.update_attributes(params[:household]) doubled the record. Changing the line to @household = Household.new() fixed the problem.. :> Bob On Apr 13, 12:15 am, Bob Smith <bsm...@gmail.com> wrote: > I would have many records that match only the household_id that way. > One for each month and year. I'm trying to get the record for this > month. But that part works OK. The problem is with creating people > objects. It works fine after the record is created with the correct > records being changed, added or deleted. The problem is when a record > is created. The people objects added at that time are doubled. The > only reason I didn't add visits to the models and use association > methods was that I couldn't find a way to open the correct record that > way. > > Bob > > On Apr 12, 3:13 am, Frederick Cheung <frederick.che...@gmail.com> > wrote: > > > On 12 Apr, 05:25, Bob Smith <bsm...@gmail.com> wrote: > > > > Please help. I've tried all i know with no results... > > > > I have an app with a master class using has_many to another class. > > > When I create a new record with the params showing all fields for > > > master and the has_many class it seems to work OK. But doing an edit > > > on the record shows two copies of the has_many class, and checking > > > mysql shows the two copies. > > > You're doing this in both cases > > > > Visit.find_or_create_by_household_id_and_month_and_year(:household_id > > > => params[:id], :month => @today.month, :year => @today.year) > > > Which will create a new visit unless there is one with all of those > > same parameters. Perhaps you only wanted > > find_or_create_by_household_id ? > > Also if you used the association methods (ie household.visit = etc.) > > then active record would take care of destroying / nulling the > > previous row > > > Fred > > > > end > > > > # POST /households > > > # POST /households.xml > > > def create > > > @today = Date.today > > > @household = Household.new(params[:household]) > > > [1,2,3,4,5,6,7,8,9,10,11,12].each do |month| > > > @visit = > > > Visit.find_or_create_by_household_id_and_month_and_year(:household_id > > > => params[:id], :month => @today.month, :year => @today.year) > > > end > > > > respond_to do |format| > > > # �...@household.save > > > if @household.update_attributes(params[:household]) > > > flash[:notice] = 'Household was successfully created.' > > > format.html { redirect_to(@household) } > > > format.xml { render :xml => @household, :status > > > => :created, :location => @household } > > > else > > > format.html { render :action => "new" } > > > format.xml { render :xml => @household.errors, :status > > > => :unprocessable_entity } > > > end > > > end > > > end > > > > # PUT /households/1 > > > # PUT /households/1.xml > > > def update > > > # debugger > > > @today = Date.today > > > @household = Household.find(params[:id]) > > > @v = > > > Visit.find_or_create_by_household_id_and_month_and_year(:household_id > > > => params[:id], :month => @today.month, :year => @today.year) > > > @v.update_attributes(params['visit']) > > > respond_to do |format| > > > if @household.update_attributes(params[:household]) > > > flash[:notice] = 'Household was successfully updated.' > > > format.html { redirect_to(@household) } > > > format.xml { head :ok } > > > else > > > format.html { render :action => "edit" } > > > format.xml { render :xml => @household.errors, :status > > > => :unprocessable_entity } > > > end > > > end > > > end > > > > # DELETE /households/1 > > > # DELETE /households/1.xml > > > def destroy > > > @household = Household.find(params[:id]) > > > @household.destroy > > > > respond_to do |format| > > > format.html { redirect_to(households_url) } > > > format.xml { head :ok } > > > end > > > end > > > end > > > > <h1>New household</h1> > > > > <% form_for(@household) do |f| %> > > > <%= f.error_messages %> > > > > <p> > > > <%= f.label :name %><br /> > > > <%= f.text_field :name %> > > > </p> > > > <%= render :partial => 'people', :object => @household %> > > > > <%= render :partial => 'visit', :object => @visit %> > > > <p> > > > <%= f.submit 'Create' %> > > > </p> > > > <% end %> > > > > <%= link_to 'Back', households_path %> > > > > <h4>People in household</h4> > > > <b> Sex</b> > > > <b> Birthday</b> > > > <table> > > > <div id="people"> > > > <%= render :partial => 'person', :collection => > > > @household.people > > > %> > > > </div> > > > </table> > > > <%= link_to_function "Add a Person" do |page| > > > page.insert_html :bottom, :people, :partial => 'person', > > > :object => > > > Person.new > > > end %> > > > > <div id="person"> > > > <% @household.build_person unless @household.people %> > > > <% fields_for "household[people_attributes][]", person do | > > > person_form| %> > > > <tr><td> <%= person_form.text_field :sex, :size => 1, :maxlength > > > =>1, :index => nil, :autocomplete => "off" %></td> > > > <td><%= person_form.text_field :month, :size => 2, :maxlength > > > =>2, :index => nil, :autocomplete => "off" %>/ > > > <%= person_form.text_field :day, :size => 2, :maxlength > > > =>2, :index => nil, :autocomplete => "off" %>/ > > > <%= person_form.text_field :year, :size => 4, :maxlength > > > =>4, :index => nil, :autocomplete => "off" %></td> > > > <td> <% unless person_form.object.new_record? %> > > > <%= person_form.hidden_field :id, :index > > > => nil %> > > > <% end %> > > > </tr> > > > <% @person = person %> > > > <% end %> > > > > </div> > > -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-t...@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-talk+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.