This project is archived and is in readonly mode.
has_many association proxy delete method sometimes deletes too liberally
Reported by Gabe da Silveira | May 11th, 2010 @ 10:32 PM
Really nasty bug bit me where I was doing something like this:
class Record < ActiveRecord::Base
has_many :translations
end
...
record.translations.each do |translation|
record.translations.delete(translation) if translation.is_bad?
end
if translation is a new record (ie. no id), then all new records would be deleted from the association.
this ticket is just a placeholder for now, I'll write up a failing test case and patch when I have some time.
Comments and changes to this ticket
-
Neeraj Singh May 12th, 2010 @ 03:46 AM
I am not able to reproduce this case with rails3 edge.
class Car < ActiveRecord::Base has_many :brakes def self.lab Car.create(:name => 'John') car = Car.last brakes = car.brakes brake = brakes.create(:name => 'wow') puts "brake id is #{brake.id}" brakes.build(:name => 'cursed brake') brakes.each do |brake| puts "processing brake #{brake.name}" car.brakes.delete(brake) end end end
The output of Car.lab is
SQL (0.4ms) INSERT INTO "cars" ("name") VALUES ('John')
Car Load (0.3ms) SELECT "cars". FROM "cars" ORDER BY cars.id DESC LIMIT 1 SQL (0.4ms) INSERT INTO "brakes" ("car_id", "name") VALUES (8, 'wow') brake id is 13
SQL (0.5ms) INSERT INTO "brakes" ("car_id", "name") VALUES (8, 'airblad') Brake Load (0.3ms) SELECT "brakes". FROM "brakes" WHERE ("brakes".car_id = 8) processing brake wow
SQL (0.3ms) UPDATE "brakes" SET "car_id" = NULL WHERE ("brakes"."car_id" = 8 AND "brakes"."id" IN (13)) processing brake cursed brake
=> [#]Everything looks okay to me.
-
Ryan Bigg May 13th, 2010 @ 11:48 PM
- Tag changed from activerecord associations to activerecord associations, bugmash
- State changed from new to incomplete
Please provide a failing test case and patch for this issue.
-
Neeraj Singh July 15th, 2010 @ 03:15 AM
- Importance changed from to Low
@Gabe Let's say that I have added a new record to collection using build. Now I want to delete that record. All I have to do is collection.delete(record) and then new object previously added to collection gets deleted. This behavior looks okay to me.
If your proposal is accepted then how would anyone delete any new record from collection?
-
Gabe da Silveira July 15th, 2010 @ 03:25 AM
Actually I wasn't proposing anything, what I was experiencing was a straight-up bug. However, I eventually tracked this down to a condition in my application, so there is in fact no bug here. Please make this ticket invalid.
-
Neeraj Singh July 15th, 2010 @ 03:30 AM
- State changed from incomplete to invalid
-
Rohit Arondekar October 7th, 2010 @ 05:21 AM
- Tag changed from activerecord associations, bugmash to activerecord, associations, bugmash
Create your profile
Help contribute to this project by taking a few moments to create your personal profile. Create your profile »
<h2 style="font-size: 14px">Tickets have moved to Github</h2>
The new ticket tracker is available at <a href="https://github.com/rails/rails/issues">https://github.com/rails/rails/issues</a>