我的实验室模型:
class Lab < ApplicationRecord
has_many :chain_offers, dependent: :delete_all
has_many :offers, through: :chain_offers
我的加入模型(chain_offers)
class ChainOffer < ApplicationRecord
belongs_to :lab
belongs_to :offer
我的优惠模式
class Offer < ApplicationRecord
has_many :chain_offers
has_many :labs, through: :chain_offers
如果我尝试删除Lab,它会被删除,ChainOffer表中的记录也会被删除,但在检查Offer.all.count
后,计数仍然与删除前相同。
这样做的:
place = Place.find(place_id)
place.offers.each do |offer|
offer.destroy
end
place.destroy
解决了这个问题,但我想知道是否有办法设置关联,所以我不必编写额外的代码。
答案 0 :(得分:1)
您对多对多关系如何运作的理解是完全错误的。
让我们举个例子:
class Patient < ApplicationRecord
has_many :appointments, dependent: :destroy
has_many :doctors, through: :appointments
end
class Appointment < ApplicationRecord
belongs_to :patient
belongs_to :doctor
end
class Doctor < ApplicationRecord
has_many :appointments
has_many :doctors, through: :appointments
end
如果我们要删除Patient.find(1).destroy
患者的位置,则还应删除appointments
上appointments.patient_id = 1
的所有行。
它不应该销毁doctors
表上的任何行!这样可以将医生从其他患者身上移除,而不是你想要的。