カクカクしかじか

技術的なアレコレ

mongoidのアソシエーションの依存オプション

:delete

モデルのコールバックを実行せずに子ドキュメントを削除する。

:destroy

子ドキュメントを破棄し、モデルコールバックを実行します。

:nullify

子ドキュメントの外部キーをnilで更新して子ドキュメントを孤立させる。

:restrict

子ドキュメントが存在する場合に親を削除しようとすると Mongoid::Errors::DeleteRestriction の例外が発生する。

ActiveRecord:restrict_with_error に相当 📝

class Band
  include Mongoid::Document
  has_many :albums, dependent: :delete_all
  belongs_to :label, dependent: :nullify
end

class Album
  include Mongoid::Document
  belongs_to :band
end

class Label
  include Mongoid::Document
  has_many :bands, dependent: :restrict
end

label = Label.first
label.bands.push(Band.first)
label.delete # Raises an error since bands is not empty.

Band.first.delete # Will delete all associated albums.

docs.mongodb.com