has_many through の欠点に今更気づきました

次のようにありがちな、ユーザとグループの多対多のテーブル操作をhbtmで設定していたのですが、

 User <---- Member ---->  Group

has_many :through に変えるとプログラムが動かなくなってあせりました。

 @user.groups = new_groups

代入じゃ保存されなくなってしまいました。

 @user.groups << new_groups

これは動作する。

仕方ないので次の方法をとる。
追記:追加の処理がおかしかったので修正 (重複してた)

 delete_groups = @user.groups - new_groups
 new_groups = new_groups - @user.groups #すでに登録されてるやつは外す
 delete_groups.each {|g| @user.groups.delete g }  # こんなことしなくてもいい?
 @user.groups.reload
 @user.groups << new_groups

これならOKだと思いきや、ログを見てると INSERT SQL は発行されているけど、DELETE は見当たらず・・・。
結局、中間テーブルを直接操作するしかないんでしょうか・・・

ちなみに、環境は Rails2.0.2