मुझे बाहरी रूप से सोर्स आईडी का उपयोग करके उपयोगकर्ताओं की एक तालिका को अनुक्रमणित करने की आवश्यकता है, जो एक 64-बिट पूर्णांक है। रेल इतनी संख्या को संग्रहित करने में पूरी तरह से सक्षम है, जब तक कि यह प्राथमिक कुंजी दिखाई न दे। मैं निम्न माइग्रेशन है:पूर्णांक सीमा को अनदेखा करते हुए रेल पर रूबी
class CreateUsers < ActiveRecord::Migration
def change
create_table :users, :id => false do |t|
t.integer :id, limit: 8
t.string :name
t.timestamps null: false
end
end
end
प्रवास ठीक काम करता है, कोई त्रुटि की सूचना दी, लेकिन जब मैं एक 64-बिट पूर्णांक के साथ बीज के प्रयास, मैं इस से दूर बताया हूँ:
RangeError: 76561198054432981 is out of range for ActiveRecord::Type::Integer with limit 4
स्पष्ट रूप से रेल सीमा क्षेत्र को अनदेखा कर रहे हैं, जब तक यह प्राथमिक कुंजी/आईडी फ़ील्ड है? मुझे इससे निपटने के लिए कैसे जाना चाहिए?
इसके लायक होने के लिए मैं sqlite3 (डिफ़ॉल्ट) का उपयोग कर रहा हूं, लेकिन मेरे ज्ञान के लिए, एसक्लाइट 64-बिट पूर्णांक को संग्रहीत करने में पूरी तरह से सक्षम है।
यहाँ SQLite से table_info है:
0|id|integer(8)|0||0
1|name|varchar|0||0
2|created_at|datetime|1||0
3|updated_at|datetime|1||0
आप यकीन है कि यह एक SQLite मुद्दा नहीं है कर रहे हैं
SQLite
के कोड बेस में की वजह सेहालांकि संभव है? http://jakegoulding.com/blog/2011/02/06/sqlite-64-bit-integers/ –
@ क्रिस्टियानोबेटा मुझे विश्वास नहीं है, मैंने एक ही नाम के साथ एक ही कॉलम के साथ एक और कॉलम जोड़ने का प्रयास किया जो ठीक काम करता था । Pragma table_info के अनुसार दोनों को उसी तरह परिभाषित किया गया है। – Will
मेरे पास PostgreSQL पर एक समान समस्या है। डेटाबेस बताता है कि कॉलम 'bigint' है और कॉलम मेटाडाटा 8 की सीमा बताता है, लेकिन मुझे सक्रिय मॉडेल :: टाइप :: इंटीजर के लिए सीमा 4' –