ruby on rails - Rails DB Migration-كيفية إسقاط جدول؟




ruby-on-rails database (13)

لقد أضفت جدولاً ظننت أنني سأحتاج إليه ، لكن الآن لم أعد أخطط لاستخدامه. كيف يمكنني إزالة هذا الجدول؟

لقد قمت بالفعل بتشغيل عمليات الترحيل ، وبالتالي يكون الجدول في قاعدة البيانات الخاصة بي. أنا شخصية rails generate migration يجب أن تكون قادرة على التعامل مع هذا ، ولكن لم أفهم كيف حتى الآن.

لقد حاولت:
rails generate migration drop_tablename ،
ولكن هذا فقط إنشاء ترحيل فارغ.

ما هي الطريقة "الرسمية" لإسقاط جدول في Rails؟


هذا ليس الحل الأمثل أو الصحيح حتى الآن ، يمكنك أن تفعل ذلك في مرحلة التطوير المبكر ...

التنمية ENV. يمكنك حذف الملف الذي تم ترحيله من (db/migrate/12345.....name_of_migrated_file) .

rake db:drop
rake db:create #This is unnecessary if using SQlite, but useful sometimes.
rake db:migrate

#or
rake db:migrate:reset

إذا كان لديك ملف بذور ، فقط قم بإنشاء مهمة أشعل جديدة للتنمية.

#file: /lib/taks/db.rake
namespace :db do
  desc 'Drop, create, migrate then seed the development database'
  task database: [ 'db:drop', 'db:create', 'db:migrate', 'db:seed' ] do
    puts 'Datebase Remigrated.'
  end
end

# And you can run it. It will drop, create, migrate and seed for you.
rake db:database

  1. القضبان g الهجرة 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

أنشئ أولاً ترحيلًا فارغًا باستخدام أي اسم تريده. من المهم أن تفعل ذلك بهذه الطريقة لأنها تخلق التاريخ المناسب.

rails generate migration DropProductsTable

سيؤدي هذا إلى إنشاء ملف .rb في / db / migrate / like 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 raise ActiveRecord::IrreversibleMigration .

ثم قم بتشغيل rake db:migrate بإسقاط الجدول نيابة عنك.


اكتب الترحيل يدويًا. على سبيل المثال تشغيل rails g migration DropUsers .

بالنسبة إلى رمز الترحيل ، سأقوم فقط بقائمة مراجعة Rails Migration Checkwell الخاصة بـ Maxwell Holder

سيئة - تشغيل rake db:migrate ثم rake db:rollback ستفشل 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 g migration drop_tablename

انتقل الآن إلى db / migrate وابحث عن ملفك الذي يحتوي على drop_tablename كاسم للملف وعدِّله إلى هذا.

    def change
      drop_table :table_name
    end

ثم تحتاج إلى تشغيل

    rake db:migrate 

على وحدة التحكم الخاصة بك.


تحتاج إلى إنشاء ملف ترحيل جديد باستخدام الأمر التالي

rails generate migration drop_table_xyz

وكتابة كود drop_table في ملف ترحيل تم إنشاؤه حديثًا (db / migration / xxxxxxx_drop_table_xyz) مثل

drop_table :tablename

أو إذا كنت ترغب في إسقاط الجدول دون الترحيل ، ببساطة فتح القضبان وحدة التحكم عن طريق

$ rails c

وتنفيذ الأمر التالي

ActiveRecord::Base.connection.execute("drop table table_name")

أو يمكنك استخدام أمر أكثر بساطة

ActiveRecord::Migration.drop_table(:table_name)

في حين أن الإجابات المقدمة هنا تعمل بشكل صحيح ، كنت أرغب في الحصول على شيء أكثر "بسيطًا" ، فقد وجدته هنا: link أدخل أولاً وحدة التحكم في القضبان:

$rails console

ثم اكتب فقط:

ActiveRecord::Migration.drop_table(:users)

المكان :users هو اسم الجدول. وقمت ، عملت بالنسبة لي!


لن تتمكن دائمًا من إنشاء الترحيل حتى يكون لديك الرمز الذي تريده بالفعل. يمكنك إنشاء ترحيل فارغ ثم تعبئته بالرمز الذي تحتاجه.

يمكنك العثور على معلومات حول كيفية إنجاز مهام مختلفة في الترحيل هنا:

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

وبشكل أكثر تحديدًا ، يمكنك معرفة كيفية إسقاط جدول باستخدام الطريقة التالية:

drop_table :table_name

يركض

rake db:migrate:down VERSION=<version>

حيث <version> هو رقم إصدار ملف الترحيل الذي تريد إرجاعه.

مثال:-

rake db:migrate:down VERSION=3846656238

يمكنك ببساطة إسقاط جدول من وحدة تحكم القضبان. أولا فتح وحدة التحكم

$ rails c

ثم قم بلصق هذا الأمر في وحدة التحكم

ActiveRecord::Migration.drop_table(:table_name)

استبدل table_name بالجدول الذي تريد حذفه.

يمكنك أيضا إسقاط الجدول مباشرة من المحطة. فقط أدخل في الدليل الجذر للتطبيق الخاص بك وقم بتشغيل هذا الأمر

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

ActiveRecord::Base.connection.drop_table :table_name


قم بتشغيل هذا الأمر: -

$ rails g migration drop_table_name

ثم:

$ rake db: migrate

أو إذا كنت تستخدم قاعدة بيانات MySql ، فيمكنك:

  1. تسجيل الدخول مع قاعدة البيانات
  2. عرض قواعد البيانات
  3. عرض الجداول
  4. إسقاط table_name ؛




rake