Зависимое уничтожение генерирует неправильный sql-запрос

#ruby-on-rails

#ruby-on-rails

Вопрос:

У меня есть m: n ассоциация с кешем счетчика. Я хочу удалить пользователя и удалить соответствующие записи из ассоциации users_items. sql-запрос, который должен удалять записи из ассоциации users_items, неверен.

 class User < ApplicationRecord
  has_many :users_items, class_name: 'UsersItem', dependent: :destroy
  has_many :items, through: :users_items
end

class Item < ApplicationRecord
  has_many :users_items, class_name: 'UsersItem', dependent: :destroy
  has_many :users, through: :users_items
end

class UsersItem < ApplicationRecord
  belongs_to :user, counter_cache: true
  belongs_to :item, counter_cache: true
end

u = User.last
u.destroy

 (0.3ms)  BEGIN
  UsersItem Load (0.4ms)  SELECT "users_items".* FROM "users_items" WHERE   "users_items"."user_id" = $1  [["user_id", 41]]
  UsersItem Destroy (1.9ms)  DELETE FROM "users_items" WHERE "users_items"."" IS NULL
 (0.3ms)  ROLLBACK

 ActiveRecord::StatementInvalid (PG::SyntaxError: ERROR:  zero-length delimited identifier at or near """")
 LINE 1: DELETE FROM "users_items" WHERE "users_items"."" IS NULL
  

Комментарии:

1. Можете ли вы попробовать foreign_key явно настроить users_items ассоциацию?

Ответ №1:

Проблема была в таблице users_items. Таблица была создана без первичного ключа. Это начало работать, когда я добавил основной идентификатор.

Миф