私は働く方法を知っていますhas_many :posts, dependent: :destroy
。 User
またはhas_many
投稿が破棄され、所属するすべての投稿も破棄されます。
しかし、Post
モデルbelongs_to :user, dependent: :destroy
? Rails Guideでオプションを見つけましたが、それを操作する方法を見つけることができませんでした。
"has_many"
教師は「has_many」の生徒です。すべての生徒には1人の教師しかいませんが、すべての教師には多くの生徒がいます。これは、所属する教師を参照する外部キーまたはteacher_idが生徒にあることを意味します。
"belongs_to"
生徒は教師に「所属」します。すべての教師には多くの生徒がいますが、すべての生徒には1人の教師しかいません。繰り返しますが、生徒には、所属する教師を参照する外部キーがあります。
この生徒/教師の概念を使用してこれを解決しましょう。
教師モデル
class Teacher < ActiveRecord::Base
has_many :students, dependent: :destroy
end
学生モデル
class Student < ActiveRecord::Base
belongs_to :teacher
end
これらのモデルを仮定すると
Teacher.destroy
インスタンス化された教師と、その教師に関連付けられていたすべての生徒が削除されます。
例えば
Teacher.find(345).destroy
ID 345の教師の記録を破棄し、その教師に関連付けられているすべての生徒を破棄します。
さて、質問の核心に、私のモデルがこのように見えるとどうなりますか?
教師モデル
class Teacher < ActiveRecord::Base
has_many :students, dependent: :destroy
end
学生モデル
class Student < ActiveRecord::Base
belongs_to :teacher, dependent: :destroy
end
電話した場合
Student.destroy
これにより、インスタンス化された生徒とその生徒の関連する教師が破壊されます。しかし、私の知る限り(そしてドキュメントによると)、これはその教師に関連する他の生徒を破壊せず、彼らを「孤立」させます。
これはRubyこれに関するドキュメント1 からの引用です
:destroyに設定すると、関連するオブジェクトは、このオブジェクトが破棄されるときに破棄されます。孤立したレコードが残る可能性があるため、belongs_toを別のクラスのhas_many関係と組み合わせて使用する場合は、このオプションを指定しないでください。
すべてのユーザーのインスタンスをインスタンス化してから、メッセージdestroyを各ユーザーに送信します。この方法で破壊されたユーザーの通常の破壊ライフサイクルになります。
私は依存を設定しようとしました:: destroyをbelongs_toに。例
class Post < ActiveRecord::Base
has_many :comments, dependent: :destroy
end
class Comment < ActiveRecord::Base
belongs_to :post, dependent: :destroy
end
コンソールでは、コメントが破棄された場合、投稿は破棄されますが、belongs_to + dependentを設定するべきではないと思います:: destroy一緒に
実際、Facebookの例では、1つの投稿の1つのコメントが削除された場合、この投稿は削除されません