我已經在我的遷移文件以下爲NULL列DB唯一索引Rails的唯一性約束和匹配
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它是獨一無二的,但我也希望允許空,因此我已經在我的模型如下:
validates :product_id,
:uniqueness => true,
:allow_nil => true
偉大的作品,但後來我應該添加一個索引來遷移文件
add_index :payment_agreements, :product_id, :unique => true
很明顯,當爲product_id插入兩個空值時,這將引發異常。我只是簡單地忽略了遷移索引,但然後有機會得到兩個支付協議,具有相同的product_id,如下所示:Concurrency and integrity
我的問題是處理這個問題的最佳/最常見的方式是什麼問題
這個問題是類似於http://stackoverflow.com/questions/191421/how-to-create-a-unique-index-on-a-null-column – x1a4 2010-05-28 05:30:06
validates_uniqueness_of:PRODUCT_ID,:如果= > lambda {!self.product_id.nil? } – user386660 2010-07-09 10:11:20