default デフォルトの関連先
使用可能な関連付け
belongs_to
対となる関連に指定するオプション
なし
概要
関連先が存在しない場合に使われるデフォルトの関連先を指定する。
class Book < ApplicationRecord
belongs_to :author, default: -> { Author.first }
end
ただし、実際にデフォルトの関連先に関連が繋がるのはバリデーションが実行されたタイミングである点に注意が必要である。
book = Book.new
book.author # => nil
book.valid? # => true
book.author # => Authorのインスタンス
以下のように外部キーに値が入っていても繋がる関連先がない場合はデフォルトに差し替えられる。
book = Book.new(author_id: 99999) # 存在しないID
book.author # => nil
book.valid? # => true
book.author_id # => 1
以下の例は外部キー制約がかかっていない前提であるが、関連先が削除され外部キーがそのままになっているレコードがある場合もvalid?
を実行したタイミングでデフォルトの関連先に変更される。
Author.create # => id: 1
Author.create # => id: 2
Book.create(author: Author.last)
Author.last.destroy # 外部キー制約がかかっていればこの時点でエラーになる
book = Book.last
book.author # => nil
book.author_id # => 2
book.valid? # => true
book.author_id # => 1