Rails Eindeutigkeitsbeschränkung und passender db-eindeutiger Index für Nullspalte

Ich habe Folgendes in meiner Migrationsdatei

  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

Ich möchte sicherstellen, dass eine angegebene product_id eindeutig ist, aber ich möchte auch null zulassen, damit in meinem Modell Folgendes vorhanden ist:

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

Works toll, aber ich sollte dann einen Index zur Migrationsdatei hinzufügen

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

ffensichtlich löst dies eine Ausnahme aus, wenn zwei Nullwerte für product_id eingefügt werden. Ich könnte den Index bei der Migration einfach weglassen, aber dann besteht die Möglichkeit, dass ich zwei PaymentAgreements mit derselben product_id erhalte, wie hier gezeigt:Währung und Integrität

Meine Frage ist, was der beste / häufigste Weg ist, um mit diesem Problem umzugehen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage