Как это работает ` ' принадлежит: user, dependent:: destroy`
Я знаю, как работать has_many :posts, dependent: :destroy
. Если User
или что has_many
сообщения уничтожаются, все принадлежащие сообщения также уничтожаются.
но что происходит, когда Post
модель belongs_to :user, dependent: :destroy
?
Я нашел вариант в Rails Guide, но я не мог узнать, как это работает.
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 сообщение было удалено, это сообщение не будет удалено