ruby on rails - রেল ডিবি মাইগ্রেশন-কিভাবে একটি টেবিল ড্রপ?




ruby-on-rails database (14)

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

আমি ইতিমধ্যে মাইগ্রেশন চালানো করেছি, তাই টেবিল আমার ডাটাবেসের মধ্যে। আমি rails generate migration পরিচালনা rails generate migration এই হ্যান্ডেল করতে সক্ষম হওয়া উচিত rails generate migration চিত্র, কিন্তু আমি কিভাবে এখনও figured আছে না।

আমি চেষ্টা করেছিলাম:

rails generate migration drop_tablename

কিন্তু যে শুধু একটি খালি মাইগ্রেশন তৈরি।

Rails একটি টেবিল ড্রপ "সরকারী" উপায় কি?


  1. রেলগাড়ি জি মাইগ্রেশন drop_users
  2. মাইগ্রেশন সম্পাদনা করুন
    class DropUsers < ActiveRecord::Migration
      def change
        drop_table :users do |t|
          t.string :name
          t.timestamps
        end
      end
    end
  1. রেকে ডিবি: মাইগ্রেট

আপনি করতে পারেন সেরা উপায়

rails g migration Drop_table_Users

তারপর নিম্নলিখিত কাজ

rake db:migrate

আপনি নির্দেশিকা হিসাবে এটি একটি মাইগ্রেশন ফিরে রোল করতে পারেন:

http://guides.rubyonrails.org/active_record_migrations.html#reverting-previous-migrations

একটি মাইগ্রেশন তৈরি করুন:

rails generate migration revert_create_tablename

মাইগ্রেশন লিখুন:

require_relative '20121212123456_create_tablename'

class RevertCreateTablename < ActiveRecord::Migration[5.0]
  def change
    revert CreateTablename    
  end
end

এই ভাবে আপনি রোলব্যাক এবং কোন মাইগ্রেশন প্রত্যাবর্তন করতে পারেন


আপনি যে কোডটি চান তা ইতিমধ্যেই কেবলমাত্র মাইগ্রেশন জেনারেট করতে সক্ষম হবেন না। আপনি একটি খালি মাইগ্রেশন তৈরি করতে পারেন এবং তারপরে আপনার প্রয়োজনীয় কোড দিয়ে এটি তৈরি করতে পারেন।

এখানে মাইগ্রেশনে বিভিন্ন কাজগুলি কীভাবে সম্পন্ন করতে হয় সে সম্পর্কে আপনি তথ্য খুঁজে পেতে পারেন:

http://api.rubyonrails.org/classes/ActiveRecord/Migration.html

আরো বিশেষভাবে, আপনি নিম্নলিখিত পদ্ধতি ব্যবহার করে একটি টেবিল ড্রপ কিভাবে দেখতে পারেন:

drop_table :table_name

আমার টেবিলের পাশাপাশি আমাদের মাইগ্রেশন স্ক্রিপ্ট মুছে ফেলতে হবে ...

class Util::Table < ActiveRecord::Migration

 def self.clobber(table_name)   
    # drop the table
    if ActiveRecord::Base.connection.table_exists? table_name
      puts "\n== " + table_name.upcase.cyan + " ! " 
           << Time.now.strftime("%H:%M:%S").yellow
      drop_table table_name 
    end

    # locate any existing migrations for a table and delete them
    base_folder = File.join(Rails.root.to_s, 'db', 'migrate')
    Dir[File.join(base_folder, '**', '*.rb')].each do |file|
      if file =~ /create_#{table_name}.rb/
        puts "== deleting migration: " + file.cyan + " ! "
             << Time.now.strftime("%H:%M:%S").yellow
        FileUtils.rm_rf(file)
        break
      end
    end
  end

  def self.clobber_all
    # delete every table in the db, along with every corresponding migration 
    ActiveRecord::Base.connection.tables.each {|t| clobber t}
  end

end

টার্মিনাল উইন্ডো রান থেকে:

$ rails runner "Util::Table.clobber 'your_table_name'"

অথবা

$ rails runner "Util::Table.clobber_all"

আমি মনে করি, সম্পূর্ণরূপে "আনুষ্ঠানিক" হতে, আপনাকে একটি নতুন মাইগ্রেশন তৈরি করতে হবে এবং self.up এ drop_table করা দরকার। Self.down পদ্ধতিতে পুরো টেবিলটি পুনরায় পূর্ণ করার জন্য সমস্ত কোড থাকা উচিত। আপনি সম্ভবত মাইগ্রেশন তৈরি করার সময় সম্ভবত কোডটি schema.rb থেকে নেওয়া যেতে পারে।

মনে হচ্ছে, একটি টেবিল তৈরি করার জন্য আপনাকে কোডটি আরোপ করতে হবে যা আপনাকে এখন আর প্রয়োজন হবে না বলে মনে হচ্ছে তবে এটি সমস্ত মাইগ্রেশন কোডটি সম্পূর্ণ এবং "সরকারী" রাখবে, তাই না?

আমি শুধু একটা টেবিলের জন্য এটি করেছি যা আমাকে ছেড়ে দেওয়ার দরকার ছিল, কিন্তু সততার সাথে "ডাউন" পরীক্ষা করে নি এবং কেন আমি তা নিশ্চিত করব না।


চালান

rake db:migrate:down VERSION=<version>

যেখানে <version> আপনার মাইগ্রেশন ফাইলের সংস্করণ নম্বর যা আপনি প্রত্যাবর্তন করতে চান।

উদাহরণ: -

rake db:migrate:down VERSION=3846656238

নিজে আপনার মাইগ্রেশন লিখুন। যেমন রান rails g migration DropUsers রান।

মাইগ্রেশনের কোড হিসাবে আমি ম্যাক্সওয়েল হোল্ডারের পোস্ট রেলের মাইগ্রেশন চেকলিস্ট উদ্ধৃত করব

বিএড - চলমান rake db:migrate এবং তারপরে rake db:rollback ব্যর্থ হবে

class DropUsers < ActiveRecord::Migration
  def change
    drop_table :users
  end
end

ভালো - মাইগ্রেশন পরিবর্তনশীল হতে হবে না অভিপ্রায় প্রকাশ করে

class DropUsers < ActiveRecord::Migration
  def up
    drop_table :users
  end

  def down
    fail ActiveRecord::IrreversibleMigration
  end
end

ভাল - আসলে বিপরীত

class DropUsers < ActiveRecord::Migration
  def change
    drop_table :users do |t|
      t.string :email, null: false
      t.timestamps null: false
    end
  end
end

প্রথম যে কোনও নাম দিয়ে একটি খালি মাইগ্রেশন তৈরি করুন। এটি যথাযথ তারিখ তৈরি করে এইভাবে এটি করা গুরুত্বপূর্ণ।

rails generate migration DropProductsTable

এটি একটি। আরবি ফাইল তৈরি করবে / ডিবি / মাইগ্র্রে / 20111015185025_drop_products_table.rb

এখন এই ফাইলটি এভাবে দেখতে সম্পাদনা করুন:

class DropProductsTable < ActiveRecord::Migration
  def up
    drop_table :products
  end

  def down
    raise ActiveRecord::IrreversibleMigration
  end
end

আমি যোগ করা একমাত্র জিনিস drop_table :products ছিল drop_table :products এবং raise ActiveRecord::IrreversibleMigration

তারপর রান rake db:migrate চালান rake db:migrate এবং এটি আপনার জন্য টেবিল ড্রপ করব।


ব্যতিক্রম উত্থাপন বা এখন একটি খালি টেবিল পুনরূদ্ধার করার বিকল্প - যখন এখনও মাইগ্রেশন রোলব্যাক সক্রিয়, redo ইত্যাদি -

def change
  drop_table(:users, force: true) if ActiveRecord::Base.connection.tables.include?('users')
end

যদিও এখানে প্রদত্ত উত্তর সঠিকভাবে কাজ করে, আমি কিছুটা 'সহজতর' চেয়েছিলেন, আমি এটি এখানে খুঁজে পেয়েছি: link প্রথমে রেল কনসোল প্রবেশ করান:

$rails console

তারপর শুধু টাইপ করুন:

ActiveRecord::Migration.drop_table(:table_name)

এবং সম্পন্ন, আমার জন্য কাজ!


সহজ এবং সরকারী উপায় এই হতে হবে:

  rails g migration drop_tablename

এখন আপনার ডিবি / মাইগ্রেট এ যান এবং আপনার ফাইলটি সন্ধান করুন যা ফাইলের নাম হিসাবে drop_tablename ধারণ করে এবং এতে এটি সম্পাদনা করে।

    def change
      drop_table :table_name
    end

তারপর আপনি চালানোর প্রয়োজন

    rake db:migrate 

আপনার কনসোল উপর।


এই কমান্ড চালান: -

rails g migration drop_table_name

তারপর:

rake db:migrate

অথবা যদি আপনি MySQL ডাটাবেসটি ব্যবহার করেন তবে:

  1. ডাটাবেসের সাথে লগইন করুন
  2. show databases;
  3. show tables;
  4. drop table_name;

ড্রপ টেবিল / মাইগ্রেশন

চালান: - $ পাগল মাইগ্রেশন DropTablename জেনারেট উৎপন্ন

এক্সপ্রেস: - $ পাগল মাইগ্রেশন DropProducts জেনারেট







rake