如果我有以下关联......
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表断开连接后,我想将约会保留在约会表中。
非常感谢您的智慧!
答案 0 :(得分:4)
如果您要删除已有实例的约会,请使用collection.delete:
phys.appointments.delete(appoint)
如果要清除所有约会:
phys.appointments.clear
关于这些和许多其他有用的关联方法的详细解释:
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html。查找“从关联中删除”部分。
答案 1 :(得分:3)
你可以使用软删除方法:让另一列“删除布尔”或“deleted_at datetime”(这个编码两条信息,记录已被删除的事实和时间)。
然后在您的所有查询中,您只需要尊重这一点:... WHERE deleted_at IS NULL
使用Rails,您甚至可以将其设置为所有查询的默认值:
class Foo < ActiveRecord::Base
default_scope where('deleted_at IS NULL')
end
答案 2 :(得分:3)
你不能把那个特定的Appointment
的{{1}}设置为physician_id
吗?