Ho il seguente nel mio file di migrazioneRails vincolo di unicità e di corrispondenza indice univoco db per la colonna nullo
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
voglio garantire che, se viene specificato un product_id è unico, ma voglio anche permettere nulla così ho il seguente nel mio modello:
validates :product_id,
:uniqueness => true,
:allow_nil => true
Funziona grande, ma ho dovrebbe quindi aggiungere un indice per il file di migrazione
add_index :payment_agreements, :product_id, :unique => true
Ovviamente questo genera un'eccezione quando vengono inseriti due valori nulli per product_id. Potrei semplicemente omettere l'indice nella migrazione, ma c'è la possibilità che otterrò due Agevolazioni con lo stesso product_id come mostrato qui: Concurrency and integrity
La mia domanda è qual è il modo migliore/più comune per gestire questo problema
Questa domanda è simile a 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