Mam następujące w moim pliku migracjiSzyny unikatowości i dopasowania db unikatowy indeks dla kolumny zerowej
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
Chcę zapewnić, że jeśli product_id określona jest wyjątkowy, ale również chcę, aby umożliwić NULL tak mam następujący w moim modelu:
validates :product_id,
:uniqueness => true,
:allow_nil => true
działa świetnie, ale mam następnie dodać indeks do pliku migracji
add_index :payment_agreements, :product_id, :unique => true
Oczywiście spowoduje to zgłoszenie wyjątku, gdy wstawiono dwie wartości puste dla id_produktu. Mogę po prostu pominąć indeks w migracji, ale jest szansa, że dostanę dwa PaymentAgreements z tym samym product_id, jak pokazano tutaj: Concurrency and integrity
Moje pytanie brzmi, jaki jest najlepszy/najpowszechniejszy sposób radzenia sobie z tym problem
To pytanie jest podobna do http://stackoverflow.com/questions/191421/how-to-create-a-unique-index-on-a-null-column – x1a4
validates_uniqueness_of: product_id,: if = > lambda {! self.product_id.nil? } – user386660