概要
factory_bot_rails 6.3.0 から Active Record の PK カラムに対して sequence を指定するとエラーになるようになったようだ。
指定した場合、 FactoryBot::AttributeDefinitionError
が発生する。
FactoryBot.define do factory :hoge do # エラーになる sequence(:id) { |n| n } endend
上記のような場合、↓みたいなエラーメッセージが出る。
FactoryBot::AttributeDefinitionError: Attribute generates "id" primary key for Hoge" Do not define "id". Instead, rely on the database to generate it.
対応
指定するのをやめればいいのだが、設定で無効化することもできる。
config/application.rb
とか config/environments
あたりに設定を追加すれば OK。
config.factory_bot.reject_primary_key_attributes = false
この辺は README の Active Record Configuration
あたりに書いてある。
今のところ一括で無効化することしか出来ないが、個別に設定するような要望は上がっているようだ。
Rubocop に FactoryBot/IdSequence
というのもあるので活用してもいいかもしれない。
感想
要望 Issue を見ていると困るユースケースはありそうだなと思いつつ、 Rails (Active Record) 使うなら取り敢えずサロゲートキーを自動採番で降っておくテーブル設計に統一しとくのがいいのかなと思う。 (それはそれとして、ナチュラルキーに制約は貼るけど)