У вас есть ассоциации в обратном направлении. Чтобы установить связь «один ко многим» между тележками и товарами, вам нужно поместить внешний ключ в таблицу предметов, а не тележки, так как это позволит связать 1-1. references
просто создает целочисленный столбец, который может содержать один идентификатор.
Вы можете создать правильные миграции с помощью rails g model cart user:references
и rails g model item cart:references
. Если просто откат и повторение не возможны, вам нужно написать миграцию, чтобы добавить cart_id
в таблицу items
и удалить items_id
из таблицы carts
.
class Cart < ApplicationRecord
belongs_to :user
has_many :items # references items.cart_id
end
class Item < ApplicationRecord
belongs_to :cart # items.cart_id
end
class User
has_many :carts
has_many :items, through: :carts
end
Хотя для создания типичного интернет-магазина вам нужны три таблицы:
class Cart < ApplicationController
has_many :line_items
has_many :products, though: :line_items
end
class LineItem < ApplicationController
belongs_to :cart
belongs_to :product
end
class Product < ApplicationController
has_many :line_items
has_many :carts, though: :line_items
end