Restrição de exclusividade do Rails e índice exclusivo db correspondente para coluna nula

Tenho o seguinte no meu arquivo de migração

  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

Quero garantir que, se um product_id for especificado, ele seja exclusivo, mas também deseje permitir nulo para que eu tenha o seguinte no meu modelo:

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

Funciona muito bem, mas devo adicionar um índice ao arquivo de migração

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

Obviamente, isso gerará uma exceção quando dois valores nulos forem inseridos para product_id. Eu poderia simplesmente omitir o índice na migração, mas há a chance de obter dois PaymentAgreements com o mesmo product_id, como mostrado aqui:Concorrência e integridade

Minha pergunta é qual é a melhor / mais comum maneira de lidar com esse problema