通常のhas_many
では、親レコードが削除されたときに関連付けを削除するオプションが:dependent => :destroy
です。 has_many :through
では、他の親が子レコードに関連付けられている可能性があります。したがって、:dependent => :destroy
は何の効果もありません。最後のhas_many:throughレコードが削除されたあとの関連付けを破棄します。
最後のHMT関連から孤児になった後、子レコードが確実に削除されるようにしますか?
通常のhas_many
では、親レコードが削除されたときに関連付けを削除するオプションが:dependent => :destroy
です。 has_many :through
では、他の親が子レコードに関連付けられている可能性があります。したがって、:dependent => :destroy
は何の効果もありません。最後のhas_many:throughレコードが削除されたあとの関連付けを破棄します。
最後のHMT関連から孤児になった後、子レコードが確実に削除されるようにしますか?
私が見つけた解決策は、このようなafter_destroy
コールバック、のようだ:結合モデルに
class Parent < ActiveRecord::Base
has_many :children, :through => :parentage
after_destroy :destroy_orphaned_children
private
def destroy_orphaned_children
children.each do |child|
child.destroy if child.parents.empty?
end
end
end
、 "belongs_toの:モデル、依存:破壊" を使用たとえば
を、あなたは予定
Class Appointment
belongs_to :doctor
belongs_to :patient, dependent: :destroy
Class Doctor
has_many :appointments, dependent: :destroy
has_many :patients, through: :appointments
Class Patient
has_many :appointments
has_many :doctors, through: :appointments
私はすべての患者を破壊するという考えが好きです:)) –
私は彼の任命のすべてが破壊されたときにのみ患者を破壊したい。少なくとも1つのアポイントメントが残っている限り、私は患者を生存させたい(そうでなければ、彼は来ないだろう:-)あなたのアプローチはそれに適しているのか、アポイントメントの何人かが破壊されたときに患者を破壊するだろうか? – silverdr
は古い問題/解答に突くためにかかわらず、医師が破壊されると、患者を破壊し、そしてドクターhas_manyの患者にしたい場合は、私は 'にhas_many持っていた:through' assocationを。私はスルーモデルで「破壊」と呼んだが、孤立しているかもしれない関連の他のモデルを削除したかった。私はこのコードを私のスルーモデルの中に置きました。そして、最後のモデルは 'belongs_to'だけだったので、' each'呼び出しを取り除きました。正しい方向に押してくれてありがとう。 –