Ryan Nielsen
2006-Aug-28 06:21 UTC
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 --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk -~----------~----~----~----~------~----~------~--~---