大小カテゴリ等を実装する際にancestryというgemを使って、親と子を作成している方がいると思いますが、今回は親ID(ancestryカラム)をnullで保存する(新しいレコードを親とする)方法を記載します。
やり方
普通にancestryを空の状態で保存しようとすると、validateで怒られて保存出来ません。
しかしどうも空の値では保存できないが nil
なら保存できるようなので、Modelに対して before_validation
を行い、保存する値を変更しましょう。
Modelに以下を追記。
before_validation do
self.ancestry = nil if self.ancestry.blank?
end
validationの前にancestryに空の値が入ってきた場合、無理矢理nilに変更しています。
このやり方なら親として保存できます。
パッと見、悪手な感じなので他に最善手を知っている方は是非お教え下さい!
参考: Why do I get undefined method `before_save' for false:FalseClass when using if on before save?