В моем миграционном файле есть следующее
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
Я хочу убедиться, что если указан product_id, он уникален, но я также хочу разрешить null, чтобы в моей модели было следующее:
validates :product_id,
:uniqueness => true,
:allow_nil => true
Отлично работает, но я должен добавить индекс к файлу миграции
add_index :payment_agreements, :product_id, :unique => true
Очевидно, это вызовет исключение, когда для product_id будут вставлены два нулевых значения. Я мог бы просто пропустить индекс в миграции, но тогда есть вероятность, что я получу два PaymentAgreements с тем же product_id, как показано здесь: Параллельность и целостность
Мой вопрос - каков наилучший / наиболее распространенный способ решения этой проблемы