它是如何工作的 - “belongs_to:user,dependent :: destroy`

时间:2016-01-06 02:41:21

标签: ruby-on-rails ruby has-many belongs-to

我知道如何工作has_many :posts, dependent: :destroy。如果Userhas_many帖子被销毁,则所有相关帖子也会被销毁。

Post模型belongs_to :user, dependent: :destroy会发生什么? 我在Rails指南中找到了该选项,但我无法找到如何使用它。

http://guides.rubyonrails.org/association_basics.html

3 个答案:

答案 0 :(得分:20)

b

老师“有很多”学生。每个学生只有一位老师,但每位老师都有很多学生。这意味着学生上有一个外键或teacher_id,引用他们所属的教师。

[^c]

学生“归属于”老师。每位老师都有很多学生,但每个学生只有一位老师。同样,学生的外键是指他们所属的老师。

让我们用这个学生/老师的概念来解决这个问题。

教师模型

$

学生模特

"has_many" 

假设这些模型

"belongs_to" 

将删除实例化的教师以及与该教师关联的所有学生。

例如

class Teacher < ActiveRecord::Base
  has_many :students, dependent: :destroy
end

会破坏ID为345的教师的记录,并摧毁与该教师相关的所有相关学生。

现在问题的核心是,当我的模型看起来像这样时会发生什么?

教师模型

class Student < ActiveRecord::Base
    belongs_to :teacher 
end 

学生模特

Teacher.destroy 

如果我打电话

Teacher.find(345).destroy 

这会破坏实例化的学生和该学生的相关教师。然而据我所知(并根据文件),这不会摧毁任何其他与该老师相关的学生,使他们成为“孤儿”。

以下是有关此内容的Ruby文档的引用 1

  

如果设置为:destroy,则在此对象时销毁关联的对象。当belongs_to与另一个类的has_many关系一起使用时,不应指定此选项,因为可能会留下孤立的记录。

答案 1 :(得分:1)

它实例化所有用户的实例,然后将消息destroy发送给每个用户。导致以这种方式销毁的用户的正常销毁生命周期的结果。

答案 2 :(得分:0)

我尝试将dependent::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条评论,则该帖子不会被删除