je suit dans mon dossier de migrationRails __gVirt_NP_NN_NNPS<__ contrainte d'unicité et correspondant à index unique db pour la colonne null
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 faire en sorte que si un product_id est spécifié, il est unique, mais je veux aussi permettre ainsi null Je suit dans mon modèle:
validates :product_id,
:uniqueness => true,
:allow_nil => true
Fonctionne très bien mais je puis ajouter un index dans le fichier de migration
add_index :payment_agreements, :product_id, :unique => true
Évidemment, cela va générer une exception lorsque deux valeurs nulles sont insérées pour product_id. Je pourrais simplement omettre l'index dans la migration, mais il y a une chance que j'obtienne deux PaymentAgreements avec le même product_id comme montré ici: Concurrency and integrity
Ma question est quelle est la meilleure/la plus courante pour faire face à cela problème
Cette question est similaire à 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