উত্তর:
আপনার এটি কীভাবে করা উচিত তা এখানে:
change_column :users, :admin, :boolean, :default => false
তবে পোস্টগ্রিএসকিউএল এর মতো কিছু ডাটাবেসগুলি এর আগে তৈরি সারিগুলির জন্য ক্ষেত্রটি আপডেট করবে না, তাই আপনি স্থানান্তরকরণের ক্ষেত্রেও ক্ষেত্রটি ম্যানুয়ালি আপডেট করেছেন তা নিশ্চিত করুন।
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,: নাম, ডিফল্ট:" বিদ্যমান মানের জন্য কিছু "` _ change_column_default: foos,: নাম, ডিফল্ট: "" `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
চালান:
rak db: স্থানান্তরিত করা
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
ব্লকটি খালি রাখতে পারেন । এটি টেবিলটি মূল অবস্থায় ফিরে যাবে না তবে মাইগ্রেশনটি আবার ঘোরানো যাবে led