1

在 has_many :through 关系中,是否有一种简单的方法可以删除关联?

如果我有模型:

交易.rb

class Deal < ActiveRecord::Base
  has_many :deal_events
  has_many :events, :through => :deal_events
end

事件.rb

class Event < ActiveRecord::Base
  has_many :deal_events
  has_many :deals, :through => :deal_events
end

交易事件.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

Rails 没有输入查询,因为 event.deal_events 的查询已经执行,所以这个..

1.9.3-p327 :020 > event.deal_events
 => [] 

正在发生,但是当我退出并再次进入 rails 控制台时,查询被执行..

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 回答