ActiveRecord :: RecordNotUnique: Mysql2 :: Ошибка: повторяющаяся запись - PullRequest
0 голосов
/ 09 июня 2019

У меня возникает следующая ошибка при попытке сохранить запись с тем же URL и user_id. Проблема в том, что мне нужно добавить его, но с другим провайдером (Yext, Synup или Default) (посмотрите на самый конец ActiveRecordError).

Ниже я вставил проверки в свой контроллер, а также в индексы таблиц, но я не уверен, что

1) Мне нужно удалить текущий индекс и добавить новый с провайдером столбец

И / ИЛИ

2) изменить проверки в контроллере, чтобы разрешить сохранение записей с тем же user_id, url, но другим провайдером

Спасибо за ваш ответ !!

Ошибка ActiveRecord:

#<ActiveRecord::RecordNotUnique: Mysql2::Error: Duplicate entry '1070078-https://www.cylex.ca/company/the-painted-window-wedding-' for key 'index_business_profiles_on_user_id_and_url': INSERT INTO `business_profiles` (`local_seo_site_id`, `url`, `success_at`, `company_location_id`, `provider`, `user_id`, `created_at`, `updated_at`) VALUES (136, 'https://www.cylex.ca/company/the-painted-window-wedding-venue-24052526.html', '2019-06-08 07:36:36', 1051892, 'synup', 1070078, '2019-06-08 07:36:36', '2019-06-08 07:36:36')>

Validations:

validates :user_id, :local_seo_site_id, :url, presence: true
  validates_uniqueness_of :url, scope: [:user_id, :provider], case_sensitive: false, if: :url_changed?
  # vendor can't add same directory twice to same account
  validates_uniqueness_of :local_seo_site_id, scope: [:user_id, :admin_id, :company_location_id], on: :create, if: :added_by_vendor?
  validates :url, :url => true, if: :url_changed?

Таблица указателей:

add_index :business_profiles, [:user_id, :url], unique: true

1 Ответ

1 голос
/ 09 июня 2019

проверка контроллера применяет уникальный триплет (url, user_id, provider), в то время как индекс применяет уникальную пару (user_id, url).

если вы хотите создать запись с теми же user_id и url, что и у существующей записи, но с другим провайдером, удаление текущего уникального индекса из базы данных и добавление нового уникального индекса для триплета должно помочь.

add_index :business_profiles, [:user_id, :url, :provider], unique: true

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...