У меня есть модель, которая полиморфна 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
.
Как я могу обойти это? Стоит отметить, что эта ошибка не возникает вне тестирования.