Ответ 1
Да. В ассоциации моделей Rails можно указать параметр :dependent
, который может принимать одну из следующих трех форм:
-
:destroy/:destroy_all
Связанные объекты уничтожаются вместе с этим объектом, вызывая их методdestroy
-
:delete/:delete_all
Все связанные объекты немедленно уничтожаются без вызова метода:destroy
-
:nullify
Внешние ключи всех связанных объектов установлены наNULL
, не вызывая обратные вызовыsave
Обратите внимание, что параметр :dependent
игнорируется, если у вас установлена ассоциация :has_many X, :through => Y
.
Итак, для вашего примера вы можете выбрать, чтобы сообщение удаляло все связанные с ним комментарии, когда сама почта удаляется, без вызова метода комментариев destroy
. Это будет выглядеть так:
class Post < ActiveRecord::Base
validates_presence_of :body, :title
has_many :comments, :dependent => :delete_all
end
Обновление для Rails 4:
В Rails 4 вы должны использовать :destroy
вместо :destroy_all
.
Если вы используете :destroy_all
, вы получите исключение:
Параметр: зависимый должен быть одним из [: destroy,: delete_all,: nullify,: restrict_with_error,: restrict_with_exception]