3

这是场景

我有一个 Hospital 模型和一个 Contact 模型。对于某些情况,我们有这种类型的关系。

注意:这不是实际代码。我必须简化它以消除不必要的代码行。

class Hospital < ActiveRecord::Base  
     attr_accessible :contact_id  
     belongs_to :contacts
end

class Contact <ActiveRecord::Base
    attr_accessible :phone_number
end

每当我想更改联系人号码时,我们都会创建一个新联系人并将 Hospital 中的 contact_id 替换为这个新联系人对象的 id。

当这种情况发生时,旧的联系需要被销毁。是否有类似于 :dependent=>:destroy 的关系条件可以自动执行相同的操作?如果没有,我应该遵循一种技术来实现这种行为。

谢谢你。

4

2 回答 2

2

没有内置功能可以做你想做的事,但你可以通过回调将功能保留在它所属的模型中。

编写一个由适当的回调(:after_update例如)调用的方法,检查contact_id是否已更改,获取旧值并销毁该对象:

class Hospital < ActiveRecord::Base  
  attr_accessible :contact_id  
  belongs_to :contacts

  after_update :check_contact

  def check_contact
    if contact_id_changed?
      Contact.find(contact_id_was).destroy
    end
  end
end

我尚未对此进行测试,但它应该可以帮助您入门,以下是相关工具的文档:

于 2013-09-13T10:07:17.953 回答
-1

据我所知,没有特定的功能。有一些疑问,为什么要创建新的联系人对象?而是可以更新同一个对象。另一种方法是在更新 Hospital 对象之前存储 ID,并在成功更新后销毁 Contact 对象,但这不是一个好习惯。谢谢你。

于 2013-09-13T08:59:21.850 回答