2012-02-27 30 views
1

如果我有以下的协会......Ruby on Rails 3:如何在不删除数据库的情况下断开对象与其他对象的连接?

class Physician < ActiveRecord::Base 
    has_many :appointments 
    has_many :patients, :through => :appointments 
end 

class Appointment < ActiveRecord::Base 
    belongs_to :physician 
    belongs_to :patient 
end 

我可以将现有的任命添加到医生...

appoint = Appointments.find(params[:id]) 
phys = Physician.find(params[:id]) 
phys.appointments << appoint 
phys.save 

,但我无法弄清楚如何删除约会从医师名单中删除而不删除它。我想在与Physician表断开连接后将约会保留在约会表中。

非常感谢您的智慧!

回答

3

你就不能设置特别是Appointmentphysician_idnil

+0

这是最简单的方法。但是从问题来看,他是否想保持参照完整性和/或是否能够跟踪一个约会过去曾经联系过的医生。通过将其设置为空,他会丢失该信息。但也许它确定。这个问题没有具体说明。 – 2012-02-27 22:14:49

3

你可以使用软删除方法:让另一列为“删除布尔值”或“deleted_at datetime”(这一个编码两条信息,记录已被删除以及何时删除)。

然后在您所有的疑问,你只需要尊重这一点:... WHERE deleted_at IS NULL

使用Rails,你甚至可以把这个作为默认为所有查询:

class Foo < ActiveRecord::Base 
    default_scope where('deleted_at IS NULL') 
end 
相关问题