Tengo el siguiente en mi archivo de migraciónrieles singularidad de restricción y su adecuación índice único db para la columna nula
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
Quiero asegurar que si se especifica un product_id es único pero también quiere permitir nula por lo Tengo el siguiente en mi modelo:
validates :product_id,
:uniqueness => true,
:allow_nil => true
Funciona muy bien pero entonces habría que añadir un índice para el archivo de migración
add_index :payment_agreements, :product_id, :unique => true
Obviamente, lanzará una excepción cuando se inserten dos valores nulos para product_id. Simplemente podría omitir el índice en la migración, pero existe la posibilidad de que obtenga dos acuerdos de pago con el mismo product_id que se muestra aquí: Concurrency and integrity
Mi pregunta es cuál es la mejor/la forma más común de lidiar con esto problema
Esta pregunta es similar a http://stackoverflow.com/questions/191421/how-to-create-a-unique-index-on-a-null-column – x1a4
validates_uniqueness_of: product_id,: si = > lambda {! self.product_id.nil? } – user386660