मैं अपने प्रवास फ़ाइल में निम्न है अशक्त स्तंभ के लिए डाटाबेस अद्वितीय सूचकांक मिलानरेल विशिष्टता बाधा और
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 के लिए दो शून्य मान डाले जाएंगे। मैं बस माइग्रेशन में इंडेक्स को छोड़ सकता हूं लेकिन फिर मुझे यह दिखाया गया है कि मुझे उसी उत्पाद_आईडी के साथ दो पेमेंट एग्रीमेंट मिलेगा जैसा कि यहां दिखाया गया है: Concurrency and integrity
मेरा प्रश्न यह है कि इससे निपटने का सबसे अच्छा/सबसे आम तरीका क्या है समस्या
यह सवाल http://stackoverflow.com/questions/191421/how-to-create-a-unique-index-on-a-null-column को – x1a4
validates_uniqueness_of समान है अगर = > lambda {! self.product_id.nil? } – user386660