রেল মাইগ্রেশন ব্যবহার করে কীভাবে কলামগুলি ড্রপ করবেন


উত্তর:


917
remove_column :table_name, :column_name

এই ক্ষেত্রে:

remove_column :users, :hobby

ব্যবহারকারীর টেবিল থেকে শখ কলামটি সরিয়ে ফেলবে।


9
এবং এটি ভিতরে upএবং downপদ্ধতিগুলি নিশ্চিত করার বিষয়টি নিশ্চিত করুন change, @ পাওয়ারগুলির উত্তরে বর্ণিত নয়।
XåpplI'-I0llwlg'I -

7
@ XåpplI'-I0llwlg'I- মন্তব্যের জন্য ধন্যবাদ। পরিবর্তন পদ্ধতিটি রেল 4 অ্যাপ্লিকেশনগুলিতে একটি কলাম ড্রপ করতে ব্যবহার করা যেতে পারে, তবে 3 টি কারাগুলিতে ব্যবহার করা উচিত নয় I আমি সেই অনুসারে আমার উত্তর আপডেট করেছি।
শক্তি 21

9
এছাড়াও আপনি ব্যবহার করতে পারেন remove_column :table_name, :column_name, :type, :optionsমধ্যে change, পদ্ধতি থেকে যদি আপনাকে তা নির্দিষ্ট টাইপ মাইগ্রেশন প্রত্যাবর্তন সম্ভব। ডকুমেন্টেশন থেকে: দ্য typeএবং optionsপরামিতি যদি থাকে উপেক্ষা করা হবে। মাইগ্রেশনের changeপদ্ধতিতে এগুলি সরবরাহ করা সহায়ক হতে পারে যাতে এটি আবার ফিরে যেতে পারে। সেক্ষেত্রে , typeএবং optionsadd_column দ্বারা ব্যবহৃত হবে।
নিকোলাস

24
রেলস 4 এ, আপনি changeপদ্ধতিতে একটি কলাম সরাতে পারবেন , তবে আপনি যদি কলামের ধরণ নির্দিষ্ট করে থাকেন। যেমন remove_column, :table_name, :column_name, :column_type। অন্যথায় মাইগ্রেশন চালানোর চেষ্টা করার সময় আপনি নিম্নলিখিত ত্রুটিটি পেয়ে যাবেন:remove_column is only reversible if given a type
ডেনিস


371

রেলগুলির পুরানো সংস্করণগুলির জন্য

ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype

3 এবং তার বেশি রেলের জন্য

rails generate migration RemoveFieldNameFromTableName field_name:datatype

18
"রেলস জি" "রেল উত্পন্ন" এর বিকল্প হিসাবে ব্যবহার করা যেতে পারে
Noz

44
rails g migration remove_field_name_from_table_name field_name:datatypeএছাড়াও কাজ করে
স্টুয়ার্ট নেলসন

6
এছাড়াও নোট করুন যে AddXXXtoTTTকোনও RemoveXXXFromTTTফাইলড নেম: ডেটা টাইপ, এবং উপযুক্ত অ্যাড_ক্যালোম এবং রিমুভ_ক্লোনম স্টেটমেন্ট তৈরি হবে: rails g migration RemoveUnusefulFieldsFromUsers hair_color:string favorite_number:integerএকটি একক স্থানান্তর ব্যবহার করে দুটি বৈশিষ্ট্য সরিয়ে ফেলবে an এটিও নোট করুন যে পদ্ধতি remove_columnদ্বারা সমর্থিত নয় change, সুতরাং আপনাকে upএবং উভয়ই লিখতে হবে down
ক্লদিও ফ্লোরানি

3
4 রেল এর পক্ষে সমর্থন করে বলে মনে হচ্ছে change। রোলব্যাকটি যেমনটি করা উচিত তেমন কাজ করে।
অজানা_গুই

2
@ অ্যাডামগ্রান্ট আমি মনে করি যে আপনি যদি এমন কোনও changeপদ্ধতি ব্যবহার করেন যা ফেরত যেতে পারে * আপনাকে ডেটা টাইপ (এবং অন্যান্য সমস্ত ক্ষেত্র সংশোধক) অবহিত করতে হবে, সুতরাং আপনি যদি এই স্থানান্তরকে রোলব্যাক করেন তবে ক্ষেত্রটি সঠিকভাবে পুনরায় তৈরি করা যেতে পারে। * যখন আমি উল্টে বলি, এটি ডাটাবেস কাঠামোর দিক থেকে, অবশ্যই, সেই কলামের ডেটা অবশ্যই হারিয়ে যাবে।
আরএফভোল্টোলিনি

117

রেল 4 আপডেট করা হয়েছে, সুতরাং পরিবর্তনটি কলামটি ড্রপ করার জন্য মাইগ্রেশনে ব্যবহার করা যেতে পারে এবং মাইগ্রেশন সফলভাবে রোলব্যাক করবে। 3 টি প্রয়োগের জন্য দয়া করে নিম্নলিখিত সতর্কতাটি পড়ুন:

রেল 3 সতর্কতা

আপনি যখন এই আদেশটি ব্যবহার করেন দয়া করে নোট করুন:

rails generate migration RemoveFieldNameFromTableName field_name:datatype

উত্পন্ন মাইগ্রেশনটি এরকম কিছু দেখবে:

  def up
    remove_column :table_name, :field_name
  end

  def down
    add_column :table_name, :field_name, :datatype
  end

একটি ডাটাবেস টেবিল থেকে কলামগুলি সরানোর সময় পরিবর্তন পদ্ধতিটি ব্যবহার না করার বিষয়ে নিশ্চিত হন (রেল 3 অ্যাপসে মাইগ্রেশন ফাইলে আপনি কী চান না তার উদাহরণ):

  def change
    remove_column :table_name, :field_name
  end

রিয়েল 3-এ পরিবর্তনের পদ্ধতিটি মুছে ফেলা_ কলামটি করার সময় স্মার্ট নয়, সুতরাং আপনি এই স্থানান্তরটি রোলব্যাক করতে পারবেন না।


3
তারপরে
রেক

1
@ পাওয়ার্স - উজ্জ্বল এবং স্পষ্ট উত্তর - আপনি কি নিম্নলিখিত বিষয়গুলি বিশদভাবে জানাতে সক্ষম হবেন: "রিয়েল 3-এ পরিবর্তনের পদ্ধতিটি যখন সরানো_ক্লমনের কথা আসে তখন স্মার্ট নয়, সুতরাং আপনি এই স্থানান্তরটি রোলব্যাক করতে সক্ষম হবেন না।"
বিকেএসপুরজন

1
@ বি কে এসপুরজিয়ন - ৩ টি কারাগারে, আপনি যদি changeপদ্ধতিটি ব্যবহার করেন তবে rake db:rollbackকমান্ডটি ত্রুটিযুক্ত হবে। rake db:rollbackমূলত এর বিপরীত rake db:migrate। এই বাগটি 4 টি :) :)
পাওয়ারগুলি

2
রেলস 4 এ, আমি একটি পরিবর্তন ড্রপ কলামটি রোলব্যাক করার চেষ্টা করেছি। এটি ব্যর্থ হয়েছে এবং জানিয়েছে যে আপনাকে অবশ্যই ডেটা টাইপ নির্দিষ্ট করতে হবে (আপনার উত্তরটিতে আপনার ডাউন কোডের মতো)
আরএমসিচারি

1
@Rmchaharry হিসাবে আমার কাছে একই সমস্যা দেখা দিয়েছে। আমার রেল সংস্করণটি 4.2.2 এবং আমি পরিবর্তন পদ্ধতিটি ব্যবহার করেছি। যখন আমি রোলব্যাক করার চেষ্টা করেছি, ত্রুটি ঘটেছে যে সরানো_কলামটি কেবল তখন কোনও প্রকার দেওয়া হলে পুনরায় দেখা যায়।
এম হাবিব

38

একটি রেল 4 অ্যাপে কলামগুলি অপসারণের জন্যও পরিবর্তন পদ্ধতিটি ব্যবহার করা সম্ভব। তৃতীয় প্যারামটি হ'ল ডেটা টাইপ এবং alচ্ছিকভাবে আপনি বিকল্প দিতে পারেন। এটি ডকুমেন্টেশনের 'উপলভ্য রূপান্তরগুলি' বিভাগে কিছুটা লুকিয়ে রয়েছে ।

class RemoveFieldFromTableName < ActiveRecord::Migration
  def change
    remove_column :table_name, :field_name, :data_type, {}
  end
end

27

এটি করার দুটি ভাল উপায় রয়েছে:

remove_column

আপনি সহজেই সরানো_ কলামটি ব্যবহার করতে পারেন:

remove_column :users, :first_name

আপনার স্কিমায় যদি কেবলমাত্র একক পরিবর্তন করতে হয় তবে এটি ঠিক আছে।

পরিবর্তন_ টেবিল ব্লক

আপনি চেঞ্জ টেবিল ব্লক ব্যবহার করে এটিও করতে পারেন, এর মতো:

change_table :users do |t|
  t.remove :first_name
end

আমি এটি আরও সুস্পষ্ট বলে মনে করি এবং আপনি একবারে বেশ কয়েকটি পরিবর্তন করতে পারেন।

সমর্থিত পরিবর্তন_সামগ্রী পদ্ধতিগুলির সম্পূর্ণ তালিকা এখানে রয়েছে:

http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table


15

রেল 5 এ আপনি টার্মিনালে এই কমান্ডটি ব্যবহার করতে পারেন:

rails generate migration remove_COLUMNNAME_from_TABLENAME COLUMNNAME:DATATYPE

উদাহরণস্বরূপ সারণী ব্যবহারকারীদের থেকে কলাম অ্যাক্সেস-লেভেল (স্ট্রিং) অপসারণ:

rails generate migration remove_access_level_from_users access_level:string

এবং তারপরে চালান:

rake db:migrate

14

একটি কলাম সরাতে মাইগ্রেশন তৈরি করুন যেমন এটি স্থানান্তরিত হলে ( rake db:migrate), এটি কলামটি বাদ দেয় । এবং এই মাইগ্রেশনটি রোলব্যাকড ( ) করা থাকলে এটি কলামে ফিরে যুক্ত হওয়া উচিত rake db:rollback

বাক্য গঠন:

সরান_কলাম: টেবিলের নাম,: কলাম_নাম,: প্রকার

কলাম সরায়, মাইগ্রেশন রোলব্যাক করা থাকলে ফিরে কলামও যুক্ত করে

উদাহরণ:

remove_column :users, :last_name, :string

দ্রষ্টব্য : আপনি যদি ডেটা টাইপ এড়িয়ে যান তবে মাইগ্রেশন সফলভাবে কলামটি সরিয়ে ফেলবে তবে আপনি যদি মাইগ্রেশনটি রোলব্যাক করেন তবে এটি একটি ত্রুটি ছুঁড়ে দেবে।


13

কারাগারের জন্য সাফ ও সরল নির্দেশাবলী 5.2

  • সতর্কতা: আপনি যদি আপনার ডাটাবেস থেকে কোনও কলাম সরিয়ে ফেলেন তবে আপনি ডেটা হারাবেন । এগিয়ে যেতে, নীচে দেখুন:
  • সতর্কতা: নীচের নির্দেশাবলী তুচ্ছ মাইগ্রেশনের জন্য । উদাহরণস্বরূপ লক্ষ লক্ষ এবং কয়েক মিলিয়ন সারি সহ জটিল মাইগ্রেশনগুলির জন্য আপনাকে ব্যর্থতার সম্ভাবনার জন্য অ্যাকাউন্ট করতে হবে, আপনার স্থানান্তরকে কীভাবে অনুকূলিত করা যায় সেজন্য আপনাকে কীভাবে দ্রুত চলতে হবে এবং ব্যবহারকারীরা আপনার অ্যাপ্লিকেশনটি ব্যবহার করার সম্ভাবনা সম্পর্কেও ভাবতে হবে মাইগ্রেশন প্রক্রিয়াটি ঘটছে। আপনার যদি একাধিক ডাটাবেস থাকে বা কোনও কিছু যদি দূর থেকে জটিল হয় তবে কিছু ভুল হলে আমাকে দোষ দেবেন না!

1. একটি স্থানান্তর তৈরি করুন

আপনার টার্মিনালে নিম্নলিখিত কমান্ডটি চালান :

rails generate migration remove_fieldname_from_tablename fieldname:fieldtype

দ্রষ্টব্য: রেল সম্মেলন অনুযায়ী সারণির নাম বহুবচন আকারে হওয়া উচিত।

উদাহরণ:

আমার ক্ষেত্রে আমি টেবিল acceptedথেকে কলামটি (একটি বুলিয়ান মান) সরাতে চাই quotes:

rails g migration RemoveAcceptedFromQuotes accepted:boolean

ডকুমেন্টেশন পুনরায় দেখুন: একটি সারণীতে ক্ষেত্রগুলি যুক্ত / সরানোর সময় একটি সম্মেলন:

মাইগ্রেশন তৈরির জন্য একটি বিশেষ সিনট্যাক্টিক শর্টকাট রয়েছে যা কোনও টেবিলে ক্ষেত্র যুক্ত করে।

রেলগুলি মাইগ্রেশন যুক্ত করে_ফিল্ডনাম_ টু-টেবিল নাম ক্ষেত্রের নাম: ফিল্ডটাইপ

2. স্থানান্তর পরীক্ষা করুন

# db/migrate/20190122035000_remove_accepted_from_quotes.rb
class RemoveAcceptedFromQuotes < ActiveRecord::Migration[5.2]
  # with rails 5.2 you don't need to add a separate "up" and "down" method.
  def change
    remove_column :quotes, :accepted, :boolean
  end
end

৩. মাইগ্রেশন চালান

rake db:migrate

.... এবং তারপরে আপনি দৌড়ে যাচ্ছেন!


এখন মাইগ্রেশনগুলিও চালানো যেতে পারেrails db:migrate
ইমরান আলী

12

RAILS 5 অ্যাপের জন্য কলামগুলি সরান

rails g migration Remove<Anything>From<TableName> [columnName:type]

উপরের কমান্ডটি db/migrateডিরেক্টরিতে একটি মাইগ্রেশন ফাইল তৈরি করে । স্নিপেট ঘা রেল জেনারেটর দ্বারা উত্পাদিত টেবিলের উদাহরণ থেকে কলাম সরানোর একটি,

class RemoveAgeFromUsers < ActiveRecord::Migration
  def up
    remove_column :users, :age
  end
  def down
    add_column :users, :age, :integer
  end
end

আমিও রেলের জন্য একটি দ্রুত রেফারেন্স গাইড তৈরি করেছি যা এখানে পাওয়া যাবে



10
rails g migration RemoveXColumnFromY column_name:data_type

এক্স = কলামের নাম
Y = টেবিলের নাম

সম্পাদনা

মন্তব্য অনুসারে পরিবর্তিত RemoveXColumnToYহয়েছে RemoveXColumnFromY- মাইগ্রেশন আসলে কী করছে তার জন্য আরও স্পষ্টতা সরবরাহ করে।


3
"সরান কলাম থেকে সারণী" অদ্ভুত শোনাচ্ছে, তাই থেকে এখানে ভাল পছন্দ বলে মনে হয়।
সেবাস্তিয়ান ভম মিয়ার

@ সেবাস্তিয়ানভমমির হ্যাঁ আমি সম্মতি দিয়েছি - ইংরেজরা 'থেকে' দিয়ে আরও ভালভাবে পড়ছে
বিকেএসপুরজিয়ন

8

টেবিল থেকে কলামটি সরাতে আপনাকে নিম্নলিখিত মাইগ্রেশন চালাতে হবে:

rails g migration remove_column_name_from_table_name column_name:data_type

তারপরে কমান্ড রান করুন:

rake db:migrate

5

কমান্ডটি নীচে দিন এটি নিজেরাই মাইগ্রেশন ফাইল যুক্ত করবে

rails g migration RemoveColumnFromModel

উপরের কমান্ডটি চালানোর পরে আপনি স্থানান্তর ফাইলটি চেক করতে পারেন মুছে ফেলা_ক্লোনম কোডটি নিজেই সেখানে যুক্ত করতে হবে

তারপরে ডিবি স্থানান্তর করুন

rake db:migrate

5

remove_columnমধ্যে changeপদ্ধতি টেবিল থেকে কলাম মুছে ফেলতে সাহায্য করবে।

class RemoveColumn < ActiveRecord::Migration
  def change
    remove_column :table_name, :column_name, :data_type
  end
end

সম্পূর্ণ রেফারেন্সের জন্য এই লিঙ্কটিতে যান: http://guides.rubyonrails.org/active_record_migrations.html


5

কেবল সহজ 3 ধাপে টেবিল থেকে কলামটি সরিয়ে ফেলার জন্য:

  1. এই আদেশ লিখুন

rails g migration remove_column_from_table_name

টার্মিনালে এই কমান্ডটি চালনার পরে এই নাম এবং টাইম স্ট্যাম্পের দ্বারা তৈরি করা একটি ফাইল (__table_name from_column)।

তারপরে এই ফাইলটিতে যান।

  1. ফাইলের ভিতরে আপনাকে লিখতে হবে

    remove_column :table_name, :column_name

  2. শেষ পর্যন্ত কনসোলে যান এবং তারপর করুন

    rake db:migrate



1


remove_column :table_name, :column_name
একটি মাইগ্রেশন ফাইলের মাধ্যমে

আপনি টাইপ করে সরাসরি একটি রেল কনসোলে একটি কলাম সরাতে পারেন:
ActiveRecord::Base.remove_column :table_name, :column_name


1

এরকম কর;

rails g migration RemoveColumnNameFromTables column_name:type

অর্থাত rails g migration RemoveTitleFromPosts title:string

যাইহোক, ডাউনটাইম সম্পর্কেও বিবেচনা করা ভাল কারণ অ্যাক্টিভেকর্ডটি রানটাইমের সময় ডাটাবেস কলামগুলিকে ক্যাশে করে তাই যদি আপনি কোনও কলামটি বাদ দেন তবে এটি আপনার অ্যাপ্লিকেশনটি পুনরায় চালু না হওয়া পর্যন্ত ব্যতিক্রম হতে পারে।

তথ্যসূত্র: শক্তিশালী মাইগ্রেশন


1

সহজভাবে, আপনি কলামটি মুছে ফেলতে পারেন

remove_column :table_name, :column_name

উদাহরণ স্বরূপ,

remove_column :posts, :comment

1

কমান্ডটি চালিয়ে একটি মাইগ্রেশন ফাইল তৈরি করার চেষ্টা করুন:

rails g migration RemoveAgeFromUsers age:string

এবং তারপরে প্রকল্পের মূল ডিরেক্টরিতে মাইগ্রেশনটি কমান্ডটি চালায়:

rails db:migrate
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.