Как это работает ` ' принадлежит: user, dependent:: destroy`

Я знаю, как работать has_many :posts, dependent: :destroy. Если User или что has_many сообщения уничтожаются, все принадлежащие сообщения также уничтожаются.

но что происходит, когда Post модель belongs_to :user, dependent: :destroy? Я нашел вариант в Rails Guide, но я не мог узнать, как это работает.

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

3 ответов


"has_many" 

учитель" has_many " студентов. У каждого ученика есть только один учитель, но у каждого учителя много учеников. Это означает, что на ученике есть внешний ключ или teacher_id, ссылающийся на то, к какому учителю они принадлежат.

"belongs_to" 

ученик "принадлежит" учителю. У каждого учителя много учеников, но у каждого ученика только один учитель. Опять же, на ученике есть внешний ключ, ссылающийся на то, какому учителю они принадлежат.

давайте вне использования этой концепции ученика / учителя.

Учителя

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

Студенческая Модель

class Student < ActiveRecord::Base
    belongs_to :teacher 
end 

предполагая, что эти модели потом

Teacher.destroy 

будет удалить экземпляр учителя и всех учеников, которые были связаны с этим учителем.

Teacher.find(345).destroy 

уничтожит запись учителя с идентификатором 345 и уничтожит все ассоциированные ученики с этим учителем.

теперь к сути вопроса, Что происходит, когда мои модели выглядят так?

Учителя

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

Студенческая Модель

class Student < ActiveRecord::Base
    belongs_to :teacher, dependent: :destroy
end 

если бы я позвонил

Student.destroy

это уничтожит экземпляр ученика и связанного с ним учителя этого ученика. Однако, насколько мне известно (и согласно документам), это не уничтожит любые другие ученики, связанные с этим учителем, оставляют их "сиротами".

вот цитата из Ruby docs об этом 1

если установлено значение: уничтожить, Связанный объект уничтожается, когда этот объект. Этот параметр не следует указывать, когда belongs_to используется в сочетании с отношением has_many для другого класса из-за возможности оставить потерянные записи.


Он создает экземпляр всех пользователей, а затем отправляет сообщение destroy каждому. Приводит к нормальному жизненному циклу уничтожения для пользователей, которые уничтожаются таким образом.


я попробовал установить 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 together

на самом деле, пример на facebook, Когда 1 комментарий 1 сообщение было удалено, это сообщение не будет удалено