factory_bot_rails 6.3.0 から PK に対する sequence はエラーになる #rails

概要

factory_bot_rails 6.3.0 から Active Record の PK カラムに対して sequence を指定するとエラーになるようになったようだ。

指定した場合、 FactoryBot::AttributeDefinitionError が発生する。

github.com

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) 使うなら取り敢えずサロゲートキーを自動採番で降っておくテーブル設計に統一しとくのがいいのかなと思う。 (それはそれとして、ナチュラルキーに制約は貼るけど)