У меня есть следующие поля: Profile_ID, CODE A, CODE B.
Все поля обязательны для заполнения. КОД B может быть нулевым, но не более одного раза для каждого КОДА А.
Например.
VALID -> ID профиля = 1 | Код A = X | Код B = NULL
НЕ ДЕЙСТВИТЕЛЬНО -> ID профиля = 1 | Код А = Х | Код B = NULL
Если найдены дубликаты, их можно игнорировать. Проблема в том, что Postgres не может различить guish нулевое значение для уникальности. Как я могу решить? Мне нужно использовать метод массового импорта ( ActiveRecord-import ), потому что нужно вставить много записей. Поэтому я не могу использовать find_or_create_by ()
ActiveImport (POSTGRES)
Item.import records, on_duplicate_key_update: {
conflict_target: [:profile_id, :code_a, :code_b],
columns: [:price]
}
Модель
class Item < ApplicationRecord
belongs_to :profile, touch: true
validates :code_a, presence: true
validates_uniqueness_of :code_b, scope: [:profile_id, :code_a]