Update join table using list of checkboxes in Rails
Actually, Active Record can work with joined collection (including has_many :through) from the box.

So, you just need to pass new collection instead of old, and AR will delete excessive and add new records.

In your code, need to change create method body to:

gig = Gig.find(params[:gig_id])
singer_ids = params[:singer_ids] # [1, 4, 5,]
gig.singers = Singer.find(singer_ids)
redirect_to gigs_path