Updating Nested Attributes append instead of updating in has many relationships I am trying to use Rails 4 Update_attributes
Class Person <ActiveRecord::Base  has_many :pets  accepts_nested_attributes_for :pets end  Class Pet < ActiveRecord::Base  belongs_to :person end   In my controller I am recieveing the params as {id: 23, house_no:'22A', pets: [{name:'jeffy', type:'dog'}, {name:'sharky', type:'fish'}]}
and my update method is
def update   @Person = Person.find(params[:id])   if @Person.update(person_params)     @Person.save     render 'persons/create', status 200   else     render 'persons/create', status 400   end end  private def person_params   person_params = params.permit(:house_no)   person_params.merge! ({pets_attributes: params[:pets]}) if params[:pets].present?   person_params end   Now when I update it and if the person already has a pet then the new pets gets appended instead of getting updated eg if a person with id 1 has 1 pet named "Tiger" and I update that person with 2 pets named "Shasha" and "Monti" then the person record has 3 pets (Tiger, Shasha and Monti) instead of updating it to 2 (Shasha and Monti)
You have to add the :id attribute to the :pets_attributes array in person_params.
You need to permit the id attribute to update the records.
see the manual:
http://api.rubyonrails.org/v4.0.1/classes/ActiveRecord/NestedAttributes/ClassMethods.html
you need to send in your attributes like pets_attributes:[{name:'jeffy', type:'dog'}, {name:'sharky', type:'fish'}]
and it should work fine.
Please read
You can now set or update attributes on the associated posts through an attribute hash for a member: include the key :posts_attributes with an array of hashes of post attributes as a value.For each hash that does not have an id key a new record will be instantiated, unless the hash also contains a _destroy key that evaluates to true.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With