2016-06-03 10 views
9

मैं एक प्रवास में Postgres के डेटा प्रकार jsonb जोड़ने के बारे में पढ़ा है, यह इस तरह लग रही है:मैं jsonb डिफ़ॉल्ट चाहिए करने के लिए '{}' या {} प्रवास में <a href="http://nandovieira.com/using-postgresql-and-jsonb-with-ruby-on-rails">the scarce instructions</a> के

create_table :ref_check_ins do |t| 
    t.jsonb :document, null: false, default: '{}' 
    t.index :document, using: :gin 
end 

लेकिन वहाँ किसी भी कारण है '{}' के बजाय स्ट्रिंग के हैश इंटीड को परिभाषित करने के विरुद्ध, यानी {}?

जब यह स्ट्रिंग प्रकार, उस स्तंभ के वर्ग के परिभाषित करने:

String < Object 

जब यह प्रकार हैश को परिभाषित करने, उस स्तंभ के वर्ग:

Hash 

उत्तर

8

प्रवास फ़ाइल में, आप {} बनाम '{}' का उपयोग करना चाहते हैं।

मैं सचमुच सिर्फ थोड़ी देर के लिए संघर्ष कर रहा था, और बात यह है कि मुझे लगता है कि पीजी एडाप्टर स्पष्ट रूप से जानता है कि हैश को जेएसएसबी ऑब्जेक्ट में कैसे परिवर्तित किया जाए। यह पोस्टग्रेस डीबी में जेसन प्रकार की तरह नहीं है, जहां आप एक जेसन ऑब्जेक्ट का स्ट्रिंग वैल्यू संग्रहीत कर रहे हैं, लेकिन वास्तविक बाइनरी ऑब्जेक्ट (जेसनबी में)। मैं शायद इसे रेल 4.2 रिलीज कोड में कहीं खोद सकता हूं, लेकिन, यदि आप उस पर पतले दस्तावेज देख रहे हैं (जिसे मैं निकट भविष्य में जोड़ रहा हूं), तो यहां कुंजी यह है कि आप ' जब आप '{}' करते हैं तो वास्तव में पोस्टग्रेस से स्ट्रिंग वापस प्राप्त करना, और इस प्रकार जब आप indifferent_access पर आज़माते हैं, तो यह विफल हो जाता है, क्योंकि स्ट्रिंग में उदासीन पहुंच नहीं हो सकती है। शायद यह मेरा पहला हेडस था कि वे जो जानकारी प्रदान कर रहे थे, उनके साथ कुछ मुद्दे थे।

मैं ईमानदारी से दो बड़े टेबल एक साथ शामिल होने के लिए बिना किसी भी तरह उपयोग नहीं करते सीधे ऊपर {}, []{} से अधिक के पक्ष में है, क्योंकि आम तौर पर मैं बहुत विशिष्ट लॉगिंग कार्यक्षमता से निपटने कर रहा हूँ मैं स्पष्ट करना चाहता हूँ एक रिकार्ड पर। यह 5.0 पर मेरा विशेष उपयोग केस है, और यदि आप < 5 हैं, तो शायद यह थोड़ा अलग हो सकता है, लेकिन शायद अधिक नहीं।

संबंधित मुद्दे