Ограничение уникальности Rails и соответствие уникального индекса БД для нулевого столбца

У меня есть следующее в моем файле миграции

  def self.up
    create_table :payment_agreements do |t|
      t.boolean    :automatic, :default => true, :null => false
      t.string     :payment_trigger_on_order
      t.references :supplier
      t.references :seller
      t.references :product
      t.timestamps
    end
  end

Я хочу убедиться, что если указан product_id, он уникален, но я также хочу разрешить null, чтобы в моей модели было следующее:

  validates :product_id,
            :uniqueness => true,
            :allow_nil => true

Прекрасно работает, но я должен добавить индекс в файл миграции

add_index :payment_agreements, :product_id, :unique => true

Очевидно, это вызовет исключение, когда для product_id будут вставлены два нулевых значения. Я мог бы просто опустить индекс в миграции, но тогда есть вероятность, что я получу два PaymentAgreements с тем же product_id, как показано здесь:Параллельность и целостность

Мой вопрос в том, что является лучшим / наиболее распространенным способом решения этой проблемы

Ответы на вопрос(2)

Ваш ответ на вопрос