1

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 を答えとしてマークします。正しい方向に向けられたからです。

4

1 に答える 1

0

親モデルで

before_destroy :clear_my_association


# model stuff

private

  def clear_my_association

    self.my_association_model.clear

  end
于 2013-01-15T20:57:46.473 に答える