has_many :through 関係で、関連付けを簡単に削除する方法はありますか?
私がモデルを持っている場合:
deal.rb
class Deal < ActiveRecord::Base
has_many :deal_events
has_many :events, :through => :deal_events
end
event.rb
class Event < ActiveRecord::Base
has_many :deal_events
has_many :deals, :through => :deal_events
end
deal_event.rb
class DealEvent < ActiveRecord::Base
belongs_to :deal
belongs_to :event
end
そしてコンソールで:
deal = Deal.first
event = Event.first
deal.events << event
取引とイベントの両方の関連付けを破棄したい場合は、呼び出すことができることを知っています
deal.events.destroy(event)
event.deals.destroy(deal)
しかし、deal.deal_events と event.deal_events にはまだ deal_event が含まれています。これを実行して関係を完全に削除し、イベントを Event.all に残し、取引を Deal.all に残すよりクリーンな方法はありますか? ありがとう
アップデート
Railsコンソールは私をだましました..
私がこれをした後
deals.events << event
event.deal_events のクエリが既に実行されているため、Rails はクエリを入力していませんでした。
1.9.3-p327 :020 > event.deal_events
=> []
発生していましたが、レールコンソールを終了して再度入力すると、クエリが実行されます..
1.9.3-p327 :001 > event.deal_events
DealEvent Load (0.9ms) SELECT "deal_events".* FROM "deal_events" WHERE "deal_events"."event_id" = 1
=> [#<DealEvent id: 2, deal_id: 1, event_id: 1, created_at: "2013-01-15 21:37:24", updated_at: "2013-01-15 21:37:24">, #<DealEvent id: 3, deal_id: 1, event_id: 1, created_at: "2013-01-15 21:37:38", updated_at: "2013-01-15 21:37:38">]
@ChapleyWatson を答えとしてマークします。正しい方向に向けられたからです。