尝试保存具有相同URL和user_id的条目时出现以下错误。这里的问题是我需要添加它,但是要使用其他提供程序(Yext,Synup或Default)(请看ActiveRecordError的结尾)。
下面,我将验证内容也粘贴到了控制器和表索引中,但是我不确定
1)我需要删除当前索引,并在 provider 列中添加一个新索引
AND / OR
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')>
验证:
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
答案 0 :(得分:1)
控制器验证会强制执行一个唯一的三元组(URL,user_id,提供商), 而索引会强制使用一个唯一的对(user_id,url)。
如果您要创建一条与现有记录具有相同user_id和url的记录,但是要使用另一提供者,则可以从数据库中删除当前唯一索引并为三元组添加新的唯一索引。
add_index :business_profiles, [:user_id, :url, :provider], unique: true