Clear not working on edge Rails with has_many :through?

I have three models in an app using edge rails (currently r4833):

class Magazine < ActiveRecord::Base
has_many :subscriptions
has_many :users, :through => :subscriptions
end

class Subscription < ActiveRecord::Base
belongs_to :user
belongs_to :magazine
end

class User < ActiveRecord::Base
has_many :subscriptions
has_many :magazines, :through => :subscriptions
end

I can then create instances and associate them with no problems:

user1 = User.create(:name => “Bob”)
user2 = User.create(:name => “Fred”)
magazine = Magazine.create(:name => “WTF?!”)
magazine.users << user1
magazine.users << user2

magazine.users
=> [#<User:0x2491238 @attributes={“name”=>“Bob”, “id”=>1,
“subscription_id”=>nil}, @new_record=false,
@new_record_before_save=true, @errors=#<ActiveRecord::Errors:0x2427e3c
@base=#<User:0x2491238 …>, @errors={}>>, #<User:0x241dea0
@attributes={“name”=>“Fred”, “id”=>2, “subscription_id”=>nil},
@new_record=false, @new_record_before_save=true,
@errors=#<ActiveRecord::Errors:0x241c870 @base=#<User:0x241dea0 …>,
@errors={}>>]

Ok, cool, stuff is working so far. Now, though, I want to clear
WTF?!'s subscription list:

magazine.users.clear
=> []

magazine.save
=> true

This causes the following statement to be run:

Magazine Update (0.001742) UPDATE magazines SET “subscription_id” =
NULL, “name” = ‘WTF?!’ WHERE id = 1

And this seems to have worked:

magazine.subscription_id
=> nil

However, if I reload the model, I suddenly have my old users!

magazine.reload
=> #<Magazine:0x23fd7a4 @subscriptions=nil,
@attributes={“name”=>“WTF?!”, “id”=>“1”, “subscription_id”=>nil},
@users=nil, @errors=#<ActiveRecord::Errors:0x23e20e4
@base=#<Magazine:0x23fd7a4 …>, @errors={}>,
@new_record_before_save=nil>

magazine.users
=> [#<User:0x2389fe8 @attributes={“name”=>“Bob”, “id”=>“1”,
“subscription_id”=>nil}>, #<User:0x2389fac
@attributes={“name”=>“Fred”, “id”=>“2”, “subscription_id”=>nil}>]

magazine.subscription_id
=> nil

Huh? What am I missing? I wouldn’t expect nil ids to ever match!

A second question, is there any way to delete rows in the join
table? Rather than simply nullifying the join table rows, I’d like to
kill them completely. Is that possible?


Ryan