Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Activerecord: Remove multiple associations via array

I have a has_many through:

Foo has many Bar through foo_bars

I want to pass an array of bar ids to some method on Foo that will remove the relationship in both directions-

Something like

foo.bars.delete([1,3,5,8])

However, delete only accepts the ID of one Model. There has got to be a way to do this in bulk and I just cannot find the answer. Any help is much appreciated.

like image 867
user1491929 Avatar asked Oct 12 '25 06:10

user1491929


1 Answers

Unfortunately Richard Peck code will not work if want to delete an array of ids.
You will get a "some association expected, got Fixnum" error.
This code will be able to do the job:

foo.bars.where(id: array_of_ids).delete_all

But the best way I found this to work is based on this answer comments and related to Richard answer is to use splat = * :

foo.bars.delete(*array_of_ids)
like image 95
GEkk Avatar answered Oct 14 '25 19:10

GEkk