Reputation: 1219
I have an array of a user's favourite_guidelines. In my console it looks like this:
fg=User.first.favourite_guidelines
User Load (73.9ms) SELECT "users".* FROM "users" LIMIT 1
FavouriteGuideline Load (0.2ms) SELECT "favourite_guidelines".* FROM "favourite_guidelines" WHERE "favourite_guidelines"."user_id" = 11
=> [#<FavouriteGuideline id: 16, guideline_id: 24, user_id: 11, created_at: "2013-02-17 01:03:19", updated_at: "2013-02-17 01:03:19">, #<FavouriteGuideline id: 18, guideline_id: 23, user_id: 11, created_at: "2013-02-17 11:40:27", updated_at: "2013-02-17 11:40:27">]
So it contains two guidelines. I would like to be able to delete a value of a certain guideline_id so that the user's favourite guidelines would have that favourite removed. At the moment I have:
User.first,favourite_guidelines.delete_if{|favourite| favourite["guideline_id"] == 24}
That gives me:
.9.3p194 :066 > User.first.favourite_guidelines.delete_if{|favourite| favourite["guideline_id"] == 24}
User Load (0.4ms) SELECT "users".* FROM "users" LIMIT 1
FavouriteGuideline Load (0.3ms) SELECT "favourite_guidelines".* FROM "favourite_guidelines" WHERE "favourite_guidelines"."user_id" = 11
=> [#<FavouriteGuideline id: 18, guideline_id: 23, user_id: 11, created_at: "2013-02-17 11:40:27", updated_at: "2013-02-17 11:40:27">]'
So it looks like it is deleteing it but it's obviously not saving because then if I do:
1.9.3p194 :067 > User.first.favourite_guidelines
User Load (0.4ms) SELECT "users".* FROM "users" LIMIT 1
FavouriteGuideline Load (0.4ms) SELECT "favourite_guidelines".* FROM "favourite_guidelines" WHERE "favourite_guidelines"."user_id" = 11
=> [#<FavouriteGuideline id: 16, guideline_id: 24, user_id: 11, created_at: "2013-02-17 01:03:19", updated_at: "2013-02-17 01:03:19">, #<FavouriteGuideline id: 18, guideline_id: 23, user_id: 11, created_at: "2013-02-17 11:40:27", updated_at: "2013-02-17 11:40:27">]
What am I doing wrong?
Upvotes: 1
Views: 144
Reputation: 1051
delete_if
works on Array of returned records but not on database. Try:
User.first.favourite_guidelines.where(guideline_id: 24).destroy_all
PS. Also you could look here
Upvotes: 1
Reputation: 10137
Try this:
User.first.favourite_guidelines.destroy( :guideline_id => 24)
Or
User.first.favourite_guidelines.where( :guideline_id => 24).destroy_all
Upvotes: 1