このテストで私が間違っていることは何ですか?工場内の連想region
はそれを構築されているとき、私は今、カラムlid
モデルの主キー属性を変更すると、FactoryGirl重複キー値が一意制約に違反する
FactoryGirl.define do
factory :rep do
lid 1
email '[email protected]'
association :boss, strategy: :build
association :region, factory: :region, strategy: :build
end
factory :boss, class: Rep do
lid 2
email '[email protected]'
manager true
association :region, factory: :region, strategy: :build
end
end
を参照するために地域の主キーを変更している地域
class Region < ApplicationRecord
self.primary_key = "lid"
has_many :reps
end
ため、このクラスを考えると
require "rails_helper"
describe "Rep", type: :feature do
scenario "has a Manager and a Region" do
rep = FactoryGirl.create(:rep)
expect(rep.boss.email).to eq("[email protected]")
expect(rep.region.name).to eq("NAT")
end
end
地域の一意性検証を引き起こしています。
別のシステムに由来するlegacyid(lid)と呼ばれるこれらのIDを使用し、それらを主キーとして使用します(データベース移行はそれらを処理するためにセットアップされています)。
私は私が望むすべてがrep
とboss
同じregion
に所属するので、ときに私の両方で
FactoryGirl.define do
factory :region do
lid 10
name 'NAT'
end
end
標準「ID」フィールドを持って、このアプリに固有な他の関連付けを構築することができますboss
とregion
の関連付けが付属して工場をrep
を構築する。
うまくいけば、それはちょうど私が検討しておりませんので、愚かなものである:混乱し:
rspec spec spec/features/reps/have_managers.rb
F
Failures:
1) Reps belong to a manager
Failure/Error: rep = FactoryGirl.create(:rep)
ActiveRecord::RecordNotUnique:
PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_regions_on_lid"
DETAIL: Key (lid)=(10) already exists.
: INSERT INTO "regions" ("lid", "name", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "lid"
# ./spec/features/reps/have_managers.rb:6:in `block (2 levels) in <top (required)>'
# ------------------
# --- Caused by: ---
# PG::UniqueViolation:
# ERROR: duplicate key value violates unique constraint "index_regions_on_lid"
# DETAIL: Key (lid)=(10) already exists.
# ./spec/features/reps/have_managers.rb:6:in `block (2 levels) in <top (required)>'
私は地域の関連付けをコメントアウトすることができますように、これまでのところ、私はregion_id null false flag
をオフにするとbelongs_to optional
を作ると離れて頂いております今のところそれを無視してください
を。 – chumakoff