मैं मैक ओएस पर MySQL की एक ताजा स्थापना पर बस कुछ इसी तरह से भाग गया।
मैंने अंततः इसे डिफ़ॉल्ट रूप से "सख्त मोड" चालू करने वाले MySQL के नए संस्करणों के संयोजन तक सीमित कर दिया, और मेरी परियोजना में कुछ संदिग्ध बाधाओं के साथ एक टेबल है। विचाराधीन तालिका :has_and_belongs_to_many
में उपयोग की गई "तालिका में शामिल हों" थी रिश्ता। किसी तरह वह तालिका :created_at
. के साथ बनाई गई थी , और :updated_at
विशेषताएँ जिनमें :null => false
की बाधा थी उन पर। रेल 3.2 स्वचालित रूप से :habtm
की तालिका में शामिल होने के लिए टाइमस्टैम्प फ़ील्ड को पॉप्युलेट नहीं करता है रिश्तों। जब सख्त मोड बंद हो जाता है तो MySql केवल शून्य तारीखों के साथ कॉल्स को पॉप्युलेट करेगा, जैसे 0000-00-00 00:00:00
. सख्त मोड चालू होने पर यह एक अपवाद उत्पन्न करता है।
समस्या को ठीक करने के लिए मैंने टाइमस्टैम्प फ़ील्ड को शून्य होने देने के लिए माइग्रेशन चलाया। इस तरह:
class ChangeNullableForTimestampsOnThing1sThing2s < ActiveRecord::Migration
def up
change_column(:thing1s_thing2s, :created_at, :datetime, :null => true)
change_column(:thing1s_thing2s, :updated_at, :datetime, :null => true)
end
def down
change_column(:thing1s_thing2s, :created_at, :datetime, :null => false)
change_column(:thing1s_thing2s, :updated_at, :datetime, :null => false)
end
end
ईमानदारी से, यदि आपको उनकी आवश्यकता नहीं है तो शायद कॉलम को छोड़ देना बेहतर है, लेकिन हमारे पास कुछ विशेष मामले हैं जहां वे वास्तव में मैन्युअल रूप से सेट हो जाते हैं।