การถอดโมเดลในราง (ย้อนกลับของ“ ราง g รุ่นชื่อ…”)


115
rails g model Rating user_id:integer message:string value:integer

ฉันจะลบโมเดลนี้ออกทั้งหมดได้อย่างไร? ขอบคุณ


5
คำตอบด้านล่างของ Mikhail ใช้กับโมเดลที่สร้างขึ้นในการย้ายข้อมูลครั้งล่าสุด ผู้ที่ต้องการลบโมเดลและตารางของโมเดลที่ใช้งานมาระยะหนึ่งเธรดนี้จะอธิบายสิ่งที่ต้องทำ
Ninjakannon

คำตอบ:


192
bundle exec rake db:rollback    
rails destroy model <model_name>

เมื่อคุณสร้างโมเดลโมเดลจะสร้างการย้ายฐานข้อมูล หากคุณเรียกใช้ "ทำลาย" ในโมเดลนั้นระบบจะลบไฟล์การย้ายข้อมูล แต่ไม่ใช่ตารางฐานข้อมูล ดังนั้นก่อนวิ่ง

bundle exec rake db:rollback

:( อ่านบรรทัดแรกและทำมันเป็นความผิดของฉัน แต่คำตอบที่เรียงลำดับถูกต้องอาจช่วยได้
Mike T

4
หากเป็นการพัฒนาและคุณไม่กลัวที่จะสูญเสียข้อมูลของคุณคุณสามารถเรียกbundle exec rake db:drop db:create db:migrateใช้ได้ มันจะเป็นฐานข้อมูลใหม่ที่ว่างเปล่า
Mikhail Nikalyukin

ขอบคุณครับ ฉันกู้คืนการย้ายข้อมูลจากถังขยะ แต่ปรากฎว่าฉันมีการย้ายข้อมูลที่ขาดหายไปอีกเช่นกันดังนั้นฉันจะทำตามที่คุณแนะนำ
Mike T

6
@MikeT คุณว่าไง? กู้คืนการย้ายข้อมูลจากถังขยะไหม คุณไม่ได้ใช้ VCS ใด ๆ ? o_O คุณควรอย่างยิ่ง!
plunntic iam

ทำงานให้ฉัน แต่ฉันยังต้องเข้าไปใน route.rb และลบ "devise_for: MODEL"
cormacncheese

54

ลองทำตามนี้

rails destroy model Rating

มันจะลบโมเดลการย้ายการทดสอบและการติดตั้ง


5
จะลบทั้งหมด แต่ไม่ได้สร้างการปรับลดรุ่นการโยกย้ายหรือบางสิ่งบางอย่าง
นายที่

28

สำหรับผู้ถามในอนาคต: หากคุณไม่สามารถวางตารางจากคอนโซลได้ให้ลองสร้างการย้ายข้อมูลที่ดร็อปตารางให้คุณ คุณควรสร้างการโยกย้ายจากนั้นในตารางบันทึกไฟล์ที่คุณต้องการลดลงดังนี้:

class DropTables < ActiveRecord::Migration
  def up
    drop_table :table_you_dont_want
  end

  def down
    raise ActiveRecord::IrreversibleMigration
  end
end

คำตอบที่ดีจะทำงานตามที่คาดไว้ด้วยการปรับใช้คาปิสตราโน
LessQuesar

18
  1. เพื่อลบการย้ายข้อมูล (ถ้าคุณย้ายการย้ายข้อมูลไปแล้ว)

    rake db:migrate:down VERSION="20130417185845" #Your migration version
  2. ในการลบ Model

    rails d model name  #name => Your model name

rails d modelคือสิ่งที่ฉันต้องการเพื่อย้อนกลับrails g modelไฟล์.
คมสันพ.

3

นี่คือการนำคำตอบของ Jenny Lang ไปใช้งานที่แตกต่างกันสำหรับ Rails 5

ขั้นแรกให้สร้างไฟล์การย้าย:

bundle exec be rails g migration DropEpisodes

จากนั้นเติมไฟล์การย้ายข้อมูลดังนี้:

class DropEpisodes < ActiveRecord::Migration[5.1]
  def change
    drop_table :episodes
  end
end

วิ่งrails db:migrateจะล้มโต๊ะ หากคุณเรียกใช้rails db:rollbackRails จะแสดงActiveRecord::IrreversibleMigrationข้อผิดพลาด


นี่เป็นคำตอบที่มีประโยชน์ - แต่คำสั่งนี้ใช้ไม่ได้กับฉัน ฉันใช้: บันเดิล exec rail สร้างการย้ายข้อมูล DropEpisodes จากนั้นฉันก็จะใช้โค้ดการลบโมเดลด้านล่างเช่นกัน
Andrew Spode
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.