2013-04-17 48 views
8

Có vẻ như xa lạ với tôi, điều đó tạo ra các mô hình, chạy di cư, phá hủy nó, và tạo ra một lần nữa cùng một mô hình báo cáo SQL ngoại lệ:Di chuyển mô hình đường ray sau khi di chuyển

project|master ⇒ rails g model name name 
     invoke active_record 
     create db/migrate/20130417185814_create_names.rb 
     create app/models/name.rb 
project|master⚡ ⇒ rake db:migrate 
== CreateNames: migrating ==================================================== 
-- create_table(:names) 
    -> 0.0020s 
== CreateNames: migrated (0.0021s) =========================================== 
project|master⚡ ⇒ rails d model name 
     invoke active_record 
     remove db/migrate/20130417185814_create_names.rb 
     remove app/models/name.rb 
project|master⚡ ⇒ rake db:migrate 
project|master⚡ ⇒ rails g model name test 
     invoke active_record 
     create db/migrate/20130417185845_create_names.rb 
     create app/models/name.rb 
project|master⚡ ⇒ rake db:migrate 
== CreateNames: migrating ==================================================== 
-- create_table(:names) 
rake aborted! 
An error has occurred, this and all later migrations canceled: 

SQLite3::SQLException: table "names" already exists: CREATE TABLE "names" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "test" varchar(255), "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL) /path/project/db/migrate/20130417185845_create_names.rb:3:in `change' 
-- create_table("names", {:force=>true}) 
    -> 0.0100s 
-- initialize_schema_migrations_table() 
    -> 0.0025s 
-- assume_migrated_upto_version(20130417185814, ["/path/project/db/migrate"]) 
    -> 0.0010s 
You have 1 pending migrations: 
    20130417185845 CreateNames 
Run `rake db:migrate` to update your database then try again. 

Có lẽ, tôi làm điều gì sai? Di chuyển có mã để xóa bảng - nó có thể được sử dụng chỉ để khôi phục không?

Giải pháp

Xóa mô hình và cơ sở dữ liệu bảng và tạo ra một cái mới là khá dễ dàng:

  1. Tạo mô hình: rails g model user name
  2. Do di cư: rake db:migrate
  3. Thực hiện một cái gì đó, đột nhiên nhớ rằng bạn cần xóa mô hình
  4. Hoàn nguyên di chuyển cụ thể: rake db:migrate:down VERSION=20130417185814, trong đó 20130417185814 là id di cư (có thể được nhìn thấy trong rake db: di chuyển: tình trạng)
  5. Remove mô hình: rails d model user
  6. Đột nhiên nhớ rằng bạn cần mô hình này, nhưng với các lĩnh vực khác
  7. Tạo mô hình: rails g model user email group:references
  8. di chuyển thành công cơ sở dữ liệu: rake db:migrate

Trả lời

9
rails d model name 

Việc này chỉ xóa mô hình và không di chuyển mà bạn đã chạy (đã tạo bảng trong cơ sở dữ liệu).

Nếu bạn muốn xóa tất cả các mô hình và các bảng, bạn sẽ phải làm như sau

rake db:rollback 
rails d model name 
+0

Nhưng nếu tôi tạo mô hình không phải trong lần di chuyển cuối cùng thì sao? Tôi cần khôi phục tất cả các lần di chuyển sau nó? Có vẻ kỳ lạ. – Drakmail

+0

'rake db: di chuyển: xuống VERSION = 20130417185845' là tôi cần. Cảm ơn :) – Drakmail

4

Bạn đã xóa mô hình – đó là một hoạt động khác với thao tác di chuyển trở lại.

Phá hủy mô hình không chính xác và chỉ có vậy; nó không liên quan gì đến việc di chuyển.

+0

Tôi có cần tạo di chuyển riêng để xóa bảng không? – Drakmail

+0

@DRakmail tại sao nó không phải là bản gốc của bạn? –

+0

Vì bản gốc đã bị xóa bởi đường ray d model ModelName :) Nhưng bạn đã cho tôi một ý tưởng. Bây giờ tôi thấy công việc này: 1. Tạo mô hình 2. Di chuyển 3. 'rake db: di chuyển: xuống VERSION = 20130417185845', nơi 20130417185845 là phiên bản di cư 4. Mô hình Xóa ('ray d mô hình ModelName ') 5. Bây giờ tôi có thể tạo lại mô hình có cùng tên Cách này có đúng không? – Drakmail

0

theo lỗi di chuyển của bạn phải có một cái gì đó xảy ra với các file chuyển, hơn nữa một trong đó đề cập để tạo bảng tên.

hãy xem tệp này, theo phương pháp thay đổi của bạn.

phương pháp thay đổi trong tệp di chuyển được yêu cầu thực thi mã DB, mã DB đó có thể thực hiện một số thao tác trên DB và cùng mã đó trên thay đổi được cho là phải quay lại.

nếu bạn muốn tách biệt giữa hai bạn nên đặt mã lên phương pháp lên sẽ thực hiện các thao tác trên DB và trên phương thức xuống, thao tác cán đối diện.

tôi khuyên bạn nên xóa tất cả các tệp khi di chuyển bao gồm cả tệp gây ra sự cố và viết chúng chính xác.

nếu bạn cần trợ giúp, vui lòng đăng tệp di chuyển của bạn.

cũng hãy xem hướng dẫn: http://guides.rubyonrails.org/migrations.html

+0

Tôi không chỉnh sửa bất kỳ di cư - bạn có thể cố gắng để thực hiện lệnh này: 'đường ray tên g mô hình name' ' rake db: migrate' 'đường ray d mô hình name' ' rake db: migrate' 'rails g tên model test' ' rake db: migrate' Và xem kết quả của tôi. – Drakmail

Các vấn đề liên quan