
Rails 5.2で1:Nを同一モデルで結合する時にparent_idが必須項目化してエラーが出る問題
Rails 5.2(といか5.x)で、1:Nの関係性を同一モデルで行おうとした時、parent_idが必須項目扱いになってエラーがでる問題に遭遇しました。
具体的に言うとこんなコードでエラーが発生しました。
class User < ApplicationRecord
belongs_to :parent, class_name: 'User'
has_many :children, class_name: 'User', foreign_key: 'parent_id', dependent: :destroy
end
belongs_toなんだからnilはありえないよね?という解釈らしく、これはどうしたものか……とググったらスパっと解決方法を書いてくれた紳士がいました。
belongs_toでoptional: true
を渡せば良いらしいです。さっそく以下のように修正してtestしてみました。
class User < ApplicationRecord
belongs_to :parent, class_name: 'User', optional: true
has_many :children, class_name: 'User', foreign_key: 'parent_id', dependent: :destroy
end
無事テストが通りました。
それでは。