Restricción de unicidad de Rails e índice único db coincidente para columna nula

Tengo lo siguiente en mi archivo de migración

  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

Quiero asegurarme de que si se especifica un product_id es único, pero también quiero permitir nulo, así que tengo lo siguiente en mi modelo:

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

Funciona muy bien, pero luego debería agregar un índice al archivo de migración

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

Obviamente, esto generará una excepción cuando se inserten dos valores nulos para product_id. Simplemente podría omitir el índice en la migración, pero luego existe la posibilidad de que obtenga dos acuerdos de pago con el mismo product_id como se muestra aquí:Concurrencia e integridad

Mi pregunta es cuál es la mejor / la forma más común de tratar este problema.

Respuestas a la pregunta(2)

Su respuesta a la pregunta