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.