Contrainte d'unicité de Rails et index unique db correspondant pour la colonne null

J'ai le texte suivant dans mon fichier de migration

  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

Je veux m'assurer que, si un product_id est spécifiée, il est unique, mais je tiens également à autoriser les valeurs null et j'ai donc le suivant dans mon modèle:

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

Fonctionne très bien mais je dois ajouter un index pour le fichier de migration

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

Évidemment, cela va lever une exception lorsque deux valeurs null sont insérées pour product_id. Je pourrais tout simplement omettre l'indice dans la migration, mais ensuite, il ya la chance que je vais obtenir en deux PaymentAgreements avec la même product_id comme indiqué ici: La simultanéité et de l'intégrité

Ma question est quel est le meilleur/la plus commune façon de traiter ce problème

source d'informationauteur Dave