Câu trả lời:
remove_column :table_name, :column_name
Ví dụ:
remove_column :users, :hobby
sẽ xóa Cột sở thích khỏi bảng người dùng.
remove_column :table_name, :column_name, :type, :options
trong change
phương thức, vì nếu bạn chỉ định kiểu hoàn nguyên di chuyển là có thể. Từ tài liệu: Các tham số type
và options
sẽ bị bỏ qua nếu có. Có thể hữu ích khi cung cấp những thứ này trong change
phương thức di chuyển để nó có thể được hoàn nguyên. Trong trường hợp đó, type
và options
sẽ được add_column sử dụng.
change
phương thức, nhưng chỉ khi bạn chỉ định loại cột. Ví dụ remove_column, :table_name, :column_name, :column_type
. Nếu không, bạn sẽ gặp phải lỗi sau khi thử chạy di chuyển:remove_column is only reversible if given a type
Đối với các phiên bản cũ hơn của Rails
ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype
Dành cho Rails 3 trở lên
rails generate migration RemoveFieldNameFromTableName field_name:datatype
rails g migration remove_field_name_from_table_name field_name:datatype
cũng hoạt động
AddXXXtoTTT
một RemoveXXXFromTTT
danh sách có thể được theo sau bởi một danh sách fil_name: data_type có khoảng cách trắng và các câu lệnh add_column và remove_column thích hợp sẽ được tạo: rails g migration RemoveUnusefulFieldsFromUsers hair_color:string favorite_number:integer
xóa hai thuộc tính bằng một lần di chuyển. Cũng lưu ý rằng remove_column
không được hỗ trợ bởi change
phương thức, vì vậy bạn phải viết cả hai up
và down
.
change
cho việc này. Rollback hoạt động như nó nên.
change
phương thức có thể được hoàn nguyên * bạn sẽ cần thông báo cho loại dữ liệu (và tất cả các công cụ sửa đổi trường khác), vì vậy nếu bạn quay lại di chuyển đó, trường có thể được tạo lại chính xác. * Khi tôi nói hoàn nguyên, đó là về mặt cấu trúc cơ sở dữ liệu, tất nhiên, dữ liệu từ cột đó rõ ràng sẽ bị mất.
Rails 4 đã được cập nhật, vì vậy phương pháp thay đổi có thể được sử dụng trong quá trình di chuyển để thả một cột và quá trình di chuyển sẽ khôi phục thành công. Vui lòng đọc cảnh báo sau cho các ứng dụng Rails 3:
Cảnh báo đường ray 3
Xin lưu ý rằng khi bạn sử dụng lệnh này:
rails generate migration RemoveFieldNameFromTableName field_name:datatype
Di chuyển được tạo sẽ trông giống như thế này:
def up
remove_column :table_name, :field_name
end
def down
add_column :table_name, :field_name, :datatype
end
Đảm bảo không sử dụng phương thức thay đổi khi xóa các cột khỏi bảng cơ sở dữ liệu (ví dụ về những gì bạn không muốn trong tệp di chuyển trong ứng dụng Rails 3):
def change
remove_column :table_name, :field_name
end
Phương thức thay đổi trong Rails 3 không thông minh khi nói đến remove_column, vì vậy bạn sẽ không thể quay lại quá trình di chuyển này.
change
phương thức, thì rake db:rollback
lệnh sẽ lỗi. rake db:rollback
về cơ bản là ngược lại rake db:migrate
. Lỗi này đã được sửa trong Rails 4 :)
Trong ứng dụng rails4, có thể sử dụng phương thức thay đổi để xóa các cột. Thông số thứ ba là data_type và trong tùy chọn tiếp theo bạn có thể đưa ra các tùy chọn. Đó là một chút ẩn trong phần 'Các biến đổi có sẵn' trên tài liệu .
class RemoveFieldFromTableName < ActiveRecord::Migration
def change
remove_column :table_name, :field_name, :data_type, {}
end
end
Có hai cách tốt để làm điều này:
Bạn chỉ có thể sử dụng remove_column, như vậy:
remove_column :users, :first_name
Điều này tốt nếu bạn chỉ cần thực hiện một thay đổi duy nhất cho lược đồ của mình.
Bạn cũng có thể thực hiện việc này bằng cách sử dụng khối Change_table, như vậy:
change_table :users do |t|
t.remove :first_name
end
Tôi thích điều này vì tôi thấy nó dễ đọc hơn và bạn có thể thực hiện một vài thay đổi cùng một lúc.
Dưới đây là danh sách đầy đủ các phương thức change_table được hỗ trợ:
http://apidock.com/rails/ActiveRecord/ConnectionAd Chap / SchemaStatements / exchange_table
trong rails 5 bạn có thể sử dụng lệnh này trong terminal:
rails generate migration remove_COLUMNNAME_from_TABLENAME COLUMNNAME:DATATYPE
ví dụ để xóa cột access_level (chuỗi) khỏi người dùng bảng:
rails generate migration remove_access_level_from_users access_level:string
và sau đó chạy:
rake db:migrate
Tạo một di chuyển để loại bỏ một cột sao cho nếu nó được di chuyển ( rake db:migrate
), nó sẽ bỏ cột . Và nó nên thêm cột trở lại nếu di chuyển này được khôi phục ( rake db:rollback
).
Cú pháp:
remove_column: table_name ,: cột_name ,: loại
Xóa cột, cũng thêm cột trở lại nếu di chuyển được khôi phục.
Thí dụ:
remove_column :users, :last_name, :string
Lưu ý : Nếu bạn bỏ qua data_type , quá trình di chuyển sẽ xóa cột thành công nhưng nếu bạn quay lại quá trình di chuyển thì nó sẽ báo lỗi.
Chạy lệnh sau trong thiết bị đầu cuối của bạn:
rails generate migration remove_fieldname_from_tablename fieldname:fieldtype
Lưu ý: tên bảng phải ở dạng số nhiều theo quy ước đường ray.
Thí dụ:
Trong trường hợp của tôi, tôi muốn xóa accepted
cột (giá trị boolean) khỏi quotes
bảng:
rails g migration RemoveAcceptedFromQuotes accepted:boolean
Xem tài liệu lại: một quy ước khi thêm / xóa các trường vào bảng:
Có một lối tắt cú pháp đặc biệt để tạo các di chuyển thêm các trường vào bảng.
rails tạo di chuyển add_fieldname_to_tablename fieldname: fieldtype
# 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
.... Và sau đó bạn ra khỏi cuộc đua!
rails db:migrate
Xóa cột cho ứng dụng RAILS 5
rails g migration Remove<Anything>From<TableName> [columnName:type]
Lệnh trên tạo một tệp di chuyển trong db/migrate
thư mục. Đoạn trích là một trong những cột loại bỏ khỏi ví dụ bảng được tạo bởi trình tạo Rails,
class RemoveAgeFromUsers < ActiveRecord::Migration
def up
remove_column :users, :age
end
def down
add_column :users, :age, :integer
end
end
Tôi cũng đã làm một hướng dẫn tham khảo nhanh cho Rails có thể được tìm thấy ở đây .
rails g migration RemoveXColumnFromY column_name:data_type
X = tên cột
Y = tên bảng
BIÊN TẬP
Thay đổi RemoveXColumnToY
để RemoveXColumnFromY
theo ý kiến - cung cấp rõ ràng hơn đối với những gì mà di cư được thực sự làm.
remove_column
trong change
phương thức sẽ giúp bạn xóa cột khỏi bảng.
class RemoveColumn < ActiveRecord::Migration
def change
remove_column :table_name, :column_name, :data_type
end
end
Truy cập liên kết này để tham khảo đầy đủ: http://guides.rubyonrails.org/active_record_migations.html
Để xóa cột khỏi bảng chỉ trong 3 bước dễ dàng như sau:
rails g migration remove_column_from_table_name
sau khi chạy lệnh này trong thiết bị đầu cuối, một tệp được tạo bởi tên và dấu thời gian này (remove_column from_table_name).
Sau đó vào tập tin này.
bên trong tập tin bạn phải viết
remove_column :table_name, :column_name
Cuối cùng đi đến giao diện điều khiển và sau đó làm
rake db:migrate
Đây là một trong những từ rails console
ActiveRecord::Migration.remove_column(:table_name, :column_name)
Thông qua
remove_column :table_name, :column_name
một tập tin di chuyển
Bạn có thể xóa một cột trực tiếp trong bảng điều khiển đường ray bằng cách gõ:
ActiveRecord::Base.remove_column :table_name, :column_name
Làm như thế này;
rails g migration RemoveColumnNameFromTables column_name:type
I E rails g migration RemoveTitleFromPosts title:string
Dù sao, sẽ tốt hơn để xem xét về thời gian chết cũng vì ActiveRecord lưu trữ các cột cơ sở dữ liệu trong thời gian chạy vì vậy nếu bạn thả một cột, nó có thể gây ra ngoại lệ cho đến khi ứng dụng của bạn khởi động lại.
Tham chiếu: Di cư mạnh mẽ
Đơn giản, bạn có thể xóa cột
remove_column :table_name, :column_name
Ví dụ,
remove_column :posts, :comment
up
vàdown
các phương thức, khôngchange
, như được giải thích trong câu trả lời của @Powers.