एक नया मॉडल बनाने का प्रयास करते समय मुझे एक समान त्रुटि मिली जिसमें मौजूदा मॉडल का संदर्भ है जो रेल 5.1 पर माइग्रेट करने से पहले बनाया गया था।
हालाँकि त्रुटि संदेश उसके बारे में बहुत स्पष्ट नहीं था, मेरे मामले में यह पता चला कि समस्या पुराने मॉडल की प्राथमिक कुंजी और नए मॉडल की विदेशी कुंजी के बीच डेटा प्रकार बेमेल थी (MySQL इसकी अनुमति नहीं देता है)। ऐसा इसलिए था क्योंकि रेल 5.1 के बाद से सभी प्राथमिक और विदेशी कुंजियों का डिफ़ॉल्ट डेटा प्रकार बड़ा है, लेकिन पुराने मॉडल के लिए प्राथमिक कुंजी प्रकार अभी भी पूर्णांक था।
मैंने मौजूदा मॉडलों की सभी प्राथमिक और विदेशी कुंजियों को बिगिंट में परिवर्तित करके इसे हल किया है, इसलिए मैं रेल के नए डिफ़ॉल्ट का उपयोग कर सकता हूं और इसके बारे में भूल सकता हूं।
वर्कअराउंड नई विदेशी कुंजियों के लिए पूर्णांक प्रकार निर्दिष्ट करना भी हो सकता है ताकि वे पुराने मॉडल के प्राथमिक कुंजी प्रकार से मेल खा सकें। कुछ इस तरह:
class CreateUserImages < ActiveRecord::Migration[5.1]
def change
create_table :user_images do |t|
t.references :user, type: :integer, foreign_key: true
t.string :url
end
end
end