जवाबों:
यहां बताया गया है कि आपको यह कैसे करना चाहिए:
change_column :users, :admin, :boolean, :default => false
लेकिन कुछ डेटाबेस, जैसे PostgreSQL, पहले बनाई गई पंक्तियों के लिए फ़ील्ड को अपडेट नहीं करेगा, इसलिए सुनिश्चित करें कि आप माइग्रेशन पर भी फ़ील्ड manaully को अपडेट करें।
change_column_default :employees, :foreign, false
from:
और to:
यदि आप चाहते हैं कि यह प्रतिवर्ती हो :)
के लिए रेल 4+ , उपयोगchange_column_default
def change
change_column_default :table, :column, value
end
def change
`add_column: foos,: name, default:" मौजूदा मूल्यों के लिए कुछ "` `change_column_default: foos,: name, default:" "end
change_column_default :products, :approved, from: true, to: false
करता है : - लेकिन यह भी काम नहीं करता है।
उपयोग करने का def change
मतलब है कि आपको ऐसे माइग्रेशन लिखने चाहिए जो प्रतिवर्ती हैं। और change_column
प्रतिवर्ती नहीं है। आप ऊपर जा सकते हैं लेकिन आप नीचे नहीं जा सकते, क्योंकि change_column
यह अपरिवर्तनीय है।
इसके बजाय, हालांकि यह कुछ अतिरिक्त लाइनें हो सकती हैं, आपको उपयोग करना चाहिए def up
औरdef down
इसलिए यदि आपके पास कोई डिफ़ॉल्ट मान वाला कोई स्तंभ है, तो आपको डिफ़ॉल्ट मान जोड़ने के लिए ऐसा करना चाहिए।
def up
change_column :users, :admin, :boolean, default: false
end
def down
change_column :users, :admin, :boolean, default: nil
end
या यदि आप किसी मौजूदा कॉलम के लिए डिफ़ॉल्ट मान बदलना चाहते हैं।
def up
change_column :users, :admin, :boolean, default: false
end
def down
change_column :users, :admin, :boolean, default: true
end
रेल 4 के रूप में आप डिफ़ॉल्ट मान के साथ तालिका में एक स्तंभ जोड़ने के लिए एक माइग्रेशन उत्पन्न नहीं कर सकते हैं, निम्न चरणों का पालन मौजूदा तालिका में एक नया स्तंभ डिफ़ॉल्ट मान के साथ सही या गलत है।
$ rails generate migration add_columnname_to_tablename columnname:boolean
उपरोक्त कमांड आपकी तालिका में एक नया कॉलम जोड़ेगी।
class AddColumnnameToTablename < ActiveRecord::Migration
def change
add_column :table_name, :column_name, :boolean, default: false
end
end
$ rake db:migrate
निष्पादित:
rails generate migration add_column_to_table column:boolean
यह इस माइग्रेशन को उत्पन्न करेगा:
class AddColumnToTable < ActiveRecord::Migration
def change
add_column :table, :column, :boolean
end
end
डिफ़ॉल्ट मान जोड़ते हुए सेट करें: डिफ़ॉल्ट => 1
add_column: टेबल,: कॉलम,: बुलियन,: डिफ़ॉल्ट => 1
Daud:
रेक डीबी: माइग्रेट
Key is not present in table error
।
यह आप क्या कर सकते हैं:
class Profile < ActiveRecord::Base
before_save :set_default_val
def set_default_val
self.send_updates = 'val' unless self.send_updates
end
end
संपादित करें: ... लेकिन जाहिर है यह एक रूकी गलती है!
before_save
up
ब्लॉक के बजाय एकchange
ब्लॉक में रखें। आपdown
ब्लॉक को खाली छोड़ सकते हैं । यह मूल स्थिति में तालिका को वापस नहीं लाएगा, लेकिन माइग्रेशन को वापस रोल किया जा सकता है।