这是方案
我有医院模型和联系模式。在某些情况下,我们有这种关系。
注意:这不是实际的代码。我必须简化它以摆脱不必要的代码行。
class Hospital < ActiveRecord::Base
attr_accessible :contact_id
belongs_to :contacts
end
class Contact <ActiveRecord::Base
attr_accessible :phone_number
end
如果我想更改联系号码,我们会创建一个新联系人,并使用此新联系人对象的ID替换Hospital的contact_id。
当发生这种情况时,需要销毁旧接触。是否存在类似于:dependent =&gt;:destroy的关系条件,它可以自动执行相同的操作吗?如果没有,我应该遵循一种技术来实现这种行为。
谢谢。
答案 0 :(得分:1)
没有内置功能可以执行您想要的操作,但您可以通过回调将功能保留在模型所属的位置。
编写一个由适当的回调(例如: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
我没有测试过这个,但它应该让你开始,这里是相关工具的文档:
答案 1 :(得分:-1)
据我所知,没有具体的功能。 有一些疑问,为什么要创建新的联系对象?相反可以更新同一个对象。 另一种方法是在您对Hospital对象进行更新之前存储ID,并在成功更新后销毁Contact对象,但这不是一个好习惯。 谢谢。