कहें कि मेरे पास Transaction
नामक एक मॉडल है जिसमें :transaction_code
विशेषता है। मैं चाहता हूं कि यह विशेषता स्वचालित रूप से अनुक्रम संख्या से भर जाए जो id
से भिन्न हो सकती है (उदाहरण के लिए id=1
के साथ लेनदेन transaction_code=1000
हो सकता है)।रेल पर रूबी + पोस्टग्रेएसक्यूएल: कस्टम अनुक्रमों का उपयोग
मैंने पोस्टग्रेज़ पर अनुक्रम बनाने की कोशिश की है और फिर उस अनुक्रम के nextval
transaction_code
कॉलम के लिए डिफ़ॉल्ट मान बना दिया है।
INSERT INTO transactions (transaction_code) VALUES (NULL);
यह क्या करता है एक नई पंक्ति बनाएं है: बात यह है कि अगर मैं, आतंक विरोधी पर @transaction.transaction_code
के लिए किसी भी मूल्य निर्दिष्ट नहीं है जब मैं आतंक विरोधी पर एक @transaction.save
जारी है, यह निम्नलिखित एसक्यूएल करने की कोशिश करता ट्रांज़ेक्शन टेबल पर, लेनदेन_code के साथ अनुक्रम के अगले भाग की गणना करने और संबंधित कॉलम पर डालने के बजाय, NULL के रूप में। इस प्रकार, जैसा कि मैंने पाया, यदि आप पोस्टग्रेस के लिए न्यूल निर्दिष्ट करते हैं, तो यह मानता है कि आप वास्तव में उस कॉलम में NULL डालना चाहते हैं, भले ही इसमें डिफ़ॉल्ट मान हो (मैं ओरेकल से आ रहा हूं जिसमें एक अलग व्यवहार है)।
- या तो वहाँ ActiveRecord के
save
- या वहाँ से गुण को बाहर करने का एक तरीका है:
मैं, या तो अगर यह आतंक विरोधी डेटाबेस पर या पर किया जाता है इस पर किसी भी समाधान के लिए खुला रहा हूँ एक ट्रिगर के साथ डालने से पहले एक स्तंभ के मान को बदलने के लिए एक रास्ता
- या वहाँ एक रास्ता आतंक विरोधी
- या किसी अन्य तरीके से भीतर इन अनुक्रम संख्या उत्पन्न करने के लिए है, जब तक यह काम करता है के रूप में :-)
अग्रिम धन्यवाद।
आपके उत्तर के लिए धन्यवाद इरविन। बात यह है कि ActiveRecord की सहेजने के तरीके में, आप एक INSERT के भीतर कीवर्ड DEFAULT "भेज नहीं सकते" (जो केस हल करेगा, हाँ)। मैं एक समाधान पसंद करूंगा जो रेलवे अनुप्रयोग पर रुबी के भीतर 100% संहिताबद्ध हो सकता है, डेटाबेस पर प्रोग्रामिंग के बजाए, जो मुझे आवश्यकतानुसार किसी अन्य डीबीएमएस में माइग्रेट करने से अक्षम कर देगा। –
@ रिकार्डो: "निर्बाध रूप से दूसरे डीबीएमएस में माइग्रेट करना" एक अच्छी कल्पना है लेकिन वास्तविकता के साथ ऐसा करने के लिए बहुत कुछ नहीं है, क्षमा करें। एक ट्रिगर का एक बड़ा नकारात्मक पक्ष यह है कि आप इसे हेरोकू साझा डेटाबेस पर उपयोग करने में सक्षम नहीं होंगे। –