カスケードするActiveRecordオブジェクトのシーケンスがありますが、一部のオブジェクトは削除されていません。クローニングはアクティブレコードコールバックに影響しますか?
基本的に私は次のようにあります。 - プロジェクトは、プロジェクトの定義である
class Project < ActiveRecord::Base
has_many :tasks, :dependent => :destroy
has_many :schedules, :dependent => :destroy
has_many :project_schedules, :through => :schedules, :class_name => "Project", :dependent => :destroy
end
class Schedule < ActiveRecord::Base
belongs_to :project_schedule, :class_name => "Project"
belongs_to :project
end
class Task < ActiveRecord::Base
belongs_to :project
end
、タスク、そのプロジェクトのタスクの定義をしてhas_manyのをスケジュール:それは別のプロジェクトに元のプロジェクトをリンクしてこれは元のプロジェクトのスケジュールです。
私はスケジュールを作成するときに元のプロジェクトをディープクローニングしています(つまり、スケジュールは元のプロジェクトのクローンであり、スケジュール上の各タスクは元のスケジュールのタスクのクローンです)。
私はschedule.destroyを実行すると、私はスケジュールプロジェクトとそれに関連するすべてのタスクが削除されると予想します。ただし、スケジュールプロジェクトのみが削除され、スケジュールタスクはそのまま残ります。
これは、レコードがデータベースに残っているため、キャッシュの問題ではありません。また、プロジェクトIDと独自のIDとしてスケジュールidを持つデータベースには、明確に別々のタスクが作成されています。
クローンオブジェクトでコールバックが実行されますか?私はここでトリックを逃したことがありますか?
ありがとう、マイケル。あなたが正しいです、私はこれを間違った方法で回していました。 after_deleteコールバックを使用して見ていきます。どうもありがとう。 –