閲覧ありがとうございます!
テスト用のフィクスチャに外部キーを設定しようとすると、エラーが出てしまい困っています。
よろしくお願いいたします。
前提
3つのテーブル
動物テーブル | 中間テーブル | 分類テーブル |
---|---|---|
動物名 | 分類ID | 分類名 |
中間テーブルID | 足の本数 |
例)
ゴリラの場合
動物テーブル | 中間テーブル | 分類テーブル |
---|---|---|
ゴリラ | 分類ID | 哺乳類 |
中間テーブルID | 2 |
ruby
1### animal model 2belong_to animal_category 3 4### animal_categories 5has_many animals, dependent: :destroy 6belongs_to category 7 8[分類、足の本数] unique:true 9 10### category model 11has_many animal_categories, dependent: :destroy
問題点:
中間モデルをテストする際は、
ruby
1test/fixtures/categories.yml 2category1: 3 category_name: 哺乳類 4 5test/models/animal_category.rb 6def setup 7 @category = categories(:category1).id 8 @animal_category = AnimalCategory.new( 9 category_id: @category 10 leg_number: 2 11) 12end
で、上手く外部キーを設定することが出来ました。
しかし、動物モデルをテストしようと、
ruby
1test/fixtures/animal_categories.yml 2animal_category1: 3 category_id: <%= categories(:category1).id %> 4 leg_number: 2
を試してみたのですが上手くいきませんでした。
Model名: fixture定義名で設定できる事が分かったので、
ruby
1animal_category1: 2 category: category1 3 leg_number: 2
で試してみたら一回目は上手くいったのですが、二回目のテストをしようとすると**ActiveRecord::InvalidForeignKey: PG::ForeignKeyViolation: ERROR:**が出てしまいます。
rails db:migrate:reset
をすればテストは通るのですが、2回目からまた同じエラーが出てしまいます。
fixtureの書き方が間違っているため、うまくDBのレコードが削除できていないのか、それともfixtureは良いが、モデルのリレーションがおかしいからエラーが出ているのか分かりません。
binding.pryをテスト内に入れて確かめようとしたのですが、そこでは止まらずエラーが出て終了してしまい、どうすれば解決出来るのかがわかりません。
よろしくお願いいたします!
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。