the industrial

都内で働くITエンジニアの日記

FactoryBotでassociationアリのデータを作成しようとした時、「ActiveModel::MissingAttributeError: can't write unknown attribute `fk_XXXXXXXX`」といったエラーが出る件について

タイトルだけだと何いってんだか全然わからんですね笑

ちょっと困ってます。

例えばこんなModelがあったとして

app/models/Employee.rb

class Employee < ActiveRecord::Base
  # 上司
  belongs_to :boss, foreign_key: 'fk_employee_to_boss', optional: true
end

※つまりは自己結合

Active Record の関連付け (アソシエーション) | Rails ガイド

FactoryBotでこんなデータを作成し

spec/factories/Employees.rb

FactoryBot.define do
  factory :boss, class: User do
    name { "上司太郎" }
  end

  factory :user, class: User do
    name { "部下太郎" }
    association :boss, factory: :boss, strategy: :create
  end
end

テストケースで呼び出した場合

  it "hogehoge test" do
    # ・・・
    @user = create(:user)
    # ・・・
  end

下記のようなエラーが出てしまう

Failures:

  1) Hoges::HogeHogeController hogehoge test
     Failure/Error: @user = create(:user)

     ActiveModel::MissingAttributeError:
       can't write unknown attribute `fk_employee_to_boss`

一応、modelのforeign_keyを取ってしまえば、FactoryBotも正常に動作するで、一旦それで対応・・・。

app/models/Employee.rb

class Employee < ActiveRecord::Base
  # 上司
  belongs_to :boss, optional: true
end