Я не понимаю, почему у меня есть записи о сиротах, когда я пытаюсь уничтожить пользователя. A Пользователь имеет одну корзину , которая имеет много CartItem
У пользователя одна корзина:
class User < ApplicationRecord
has_one :cart, dependent: :destroy
has_many :cart_items, through: :cart, dependent: :destroy
has_many :samples, through: :cart_items, source: :cartable, source_type: 'Sample'
has_many :tracks, through: :cart_items, source: :cartable, source_type: 'Track'
end
: зависимый
Управляет тем, что происходит со связанным объектом при уничтожении его владельца:
- : уничтожение вызывает уничтожение связанного объекта
https://apidock.com/rails/v5.2.3/ActiveRecord/Associations/ClassMethods/has_one
В корзине много товаров:
class Cart < ApplicationRecord
belongs_to :user
has_many :cart_items, dependent: :destroy
has_many :samples, through: :cart_items, source: :cartable, source_type: 'Sample'
has_many :tracks, through: :cart_items, source: :cartable, source_type: 'Track'
end
: зависимый
Управляет тем, что происходит со связанными объектами, когда их владелец уничтожен. Обратите внимание, что они реализованы как обратные вызовы и Rails
выполняет обратные вызовы в порядке. Поэтому другие подобные обратные вызовы могут
влияет на: зависимое поведение, и: зависимое поведение может влиять
другие обратные вызовы.
- : уничтожение приводит к уничтожению всех связанных объектов.
https://apidock.com/rails/v5.2.3/ActiveRecord/Associations/ClassMethods/has_many
И пунктов:
class CartItem < ApplicationRecord
belongs_to :cart
belongs_to :cartable, polymorphic: true
end
Я хотел бы иметь возможность уничтожить пользователя с помощью, например,
User.last.destroy
, но вместо этого у меня есть ошибка:
ActiveRecord::InvalidForeignKey: PG::ForeignKeyViolation: ERROR: update or delete on table "users" violates foreign key constraint "fk_rails_ea59a35211" on table "carts"
DETAIL: Key (id)=(227) is still referenced from table "carts".
Я думал, что has_one :cart, dependent: :destroy
сделает эту работу, но, похоже, я ошибаюсь. Что мне не хватает?
Спасибо за ваше время