PG :: ForeignKeyViolation в тесте Rspe c - PullRequest
0 голосов
/ 14 января 2020

У меня есть модель, которая полиморфна c двумя способами:

class OrderItem < ApplicationRecord
  belongs_to :order, polymorphic: true
  belongs_to :orderable, polymorphic: true, optional: true
end

class Order < ApplicationRecord
  has_many :order_items, dependent: :destroy, as: :order
  has_many :orderables, through: :order_items, source: :orderable, source_type: 'Meal'
end

class FoodOrder < ActiveRecord::Base
    has_many :order_items, dependent: :destroy, as: :order
    has_many :orderables, through: :order_items, source: :orderable, source_type: "Product"
end

class OrderItem < ApplicationRecord {
                :id => :integer,
          :order_id => :integer,
        :order_type => :string,
          :quantity => :integer,
        :created_at => :datetime,
        :updated_at => :datetime,
      :orderable_id => :integer,
    :orderable_type => :string
}

Я пытаюсь создать новую запись в тесте Rspe c, но она продолжает давать мне PG::ForeignKeyViolation: ERROR :

food_order = FoodOrder.create(name: "a")
product = Product.create(name: "b")
OrderItem.create(order_type: "FoodOrder", order_id: food_order.id, orderable_id: @product.id, orderable_type: "Product", quantity: 5)

ActiveRecord::InvalidForeignKey:
       PG::ForeignKeyViolation: ERROR:  insert or update on table "order_items" violates foreign key constraint "fk_rails_e3cb28f071"
       DETAIL:  Key (order_id)=(1) is not present in table "orders".
       : INSERT INTO "order_items" ("order_id", "quantity", "created_at", "updated_at", "orderable_id", "orderable_type", "order_type") VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING "id"

Несмотря на то, что я установил order_type: "FoodOrder", я получаю сообщение об ошибке, потому что он ищет в таблице orders, когда он должен искать в таблице food_orders.

Как я могу обойти это? Стоит отметить, что эта ошибка не возникает вне тестирования.

...