Yanıtlar:
remove_column :table_name, :column_name
Örneğin:
remove_column :users, :hobby
hobi Sütununu kullanıcılar tablosundan kaldıracaktır.
remove_column :table_name, :column_name, :type, :options
içinde de kullanabilirsiniz change
, çünkü taşıma türünü geri döndürme türünü belirtirseniz mümkündür. Belgelerden; ve parametreler eğer varsa göz ardı edilecektir. Bunları bir geçiş yönteminde sağlamak yararlı olabilir, böylece geri alınabilir. Bu durumda, ve add_column tarafından kullanılacaktır. type
options
change
type
options
change
yalnızca sütun türünü belirtirseniz yöntemdeki bir sütunu kaldırabilirsiniz . Örn remove_column, :table_name, :column_name, :column_type
. Aksi takdirde, geçişi çalıştırmaya çalışırken aşağıdaki hatayı alırsınız:remove_column is only reversible if given a type
Rails'in eski sürümleri için
ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype
Ray 3 ve üstü için
rails generate migration RemoveFieldNameFromTableName field_name:datatype
rails g migration remove_field_name_from_table_name field_name:datatype
ayrıca çalışır
AddXXXtoTTT
bir RemoveXXXFromTTT
veri_türü ve uygun add_column ve remove_column ifadeleri oluşturulacaktır:: filed_name bir beyaz aralıklı listeye takip edebilir rails g migration RemoveUnusefulFieldsFromUsers hair_color:string favorite_number:integer
tek göç kullanarak iki özelliklerini kaldırır. Ayrıca yöntem remove_column
tarafından desteklenmediğini unutmayın change
, bu nedenle hem up
ve hem de yazmanız gerekir down
.
change
. Geri alma olması gerektiği gibi çalışır.
change
yöntem kullanıyorsanız * veri türünü (ve diğer tüm alan değiştiricilerini) bilgilendirmeniz gerektiğini düşünüyorum, bu nedenle bu taşımayı geri alırsanız alan doğru şekilde yeniden oluşturulabilir. * Geri döndüğümde, bu veritabanı yapısı açısından, elbette, bu sütundaki veriler açıkça kaybolacaktır.
Raylar 4 güncellendi, bu nedenle değiştirme yöntemi bir sütunu bırakmak için geçişte kullanılabilir ve taşıma başarıyla geri alınır. Rails 3 uygulamaları için lütfen aşağıdaki uyarıyı okuyun:
Rails 3 Uyarı
Bu komutu kullandığınızda lütfen unutmayın:
rails generate migration RemoveFieldNameFromTableName field_name:datatype
Oluşturulan taşıma şöyle görünür:
def up
remove_column :table_name, :field_name
end
def down
add_column :table_name, :field_name, :datatype
end
Bir veritabanı tablosundan sütunları kaldırırken değişiklik yöntemini kullanmadığınızdan emin olun (Rails 3 uygulamalarındaki taşıma dosyasında ne istemediğinize bir örnek):
def change
remove_column :table_name, :field_name
end
Remove_column söz konusu olduğunda Rails 3'teki değişiklik yöntemi akıllı değildir, bu nedenle bu taşımayı geri alamazsınız.
change
yöntemi kullanırsanız , rake db:rollback
komut hata verir. rake db:rollback
temelde bunun tam tersidir rake db:migrate
. Bu hata Rails 4'te düzeltildi :)
Bir rails4 uygulamasında, sütunları kaldırmak için de değişiklik yöntemini kullanmak mümkündür. Üçüncü parametre data_type'dir ve isteğe bağlı olarak seçenekler sunabilirsiniz. Belgelerin 'Kullanılabilir dönüşümler' bölümünde biraz gizlidir .
class RemoveFieldFromTableName < ActiveRecord::Migration
def change
remove_column :table_name, :field_name, :data_type, {}
end
end
Bunu yapmanın iki iyi yolu vardır:
Remove_column komutunu aşağıdaki gibi kullanabilirsiniz:
remove_column :users, :first_name
Şemanızda yalnızca tek bir değişiklik yapmanız gerekiyorsa bu sorun olmaz.
Bunu, aşağıdaki gibi bir change_table bloğunu kullanarak da yapabilirsiniz:
change_table :users do |t|
t.remove :first_name
end
Bunu daha okunaklı bulduğum için tercih ederim ve aynı anda birkaç değişiklik yapabilirsiniz.
Desteklenen change_table yöntemlerinin tam listesi:
http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table
raylarda 5 terminalde bu komutu kullanabilirsiniz:
rails generate migration remove_COLUMNNAME_from_TABLENAME COLUMNNAME:DATATYPE
örneğin access_level (string) sütununu tablo kullanıcılarından kaldırmak için:
rails generate migration remove_access_level_from_users access_level:string
ve sonra çalıştırın:
rake db:migrate
Bir sütunu, taşınacaksa ( rake db:migrate
) sütunu bırakacak şekilde kaldırmak için taşıma oluşturun . Ve bu taşıma geri alınırsa sütun geri eklemelidir ( rake db:rollback
).
Sözdizimi:
kaldır_ sütun: tablo_adı,: sütun_adı,: tür
Sütunu kaldırır, ayrıca taşıma geri alınırsa sütunu geri ekler .
Misal:
remove_column :users, :last_name, :string
Not : data_type öğesini atlarsanız taşıma sütunu başarıyla kaldırır, ancak taşıma işlemini geri alırsanız bir hata atar.
Terminalinizde aşağıdaki komutu çalıştırın :
rails generate migration remove_fieldname_from_tablename fieldname:fieldtype
Not: tablo adı ray kuralına göre çoğul olmalıdır.
Misal:
Benim durumumda accepted
sütun (boolean değeri) quotes
tablodan kaldırmak istiyorum :
rails g migration RemoveAcceptedFromQuotes accepted:boolean
Dokümantasyon Bkz re: bir kongre bir tabloya alanları ekleme / kaldırma sırasında:
Bir tabloya alan ekleyen geçişler oluşturmak için özel bir sözdizimsel kısayol vardır.
raylar taşıma oluşturur 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
.... Ve sonra yarışlara gidiyorsun!
rails db:migrate
RAILS 5 Uygulaması için Sütunları Kaldırma
rails g migration Remove<Anything>From<TableName> [columnName:type]
Yukarıdaki komut, db/migrate
dizin içinde bir taşıma dosyası oluşturur . Snippet darbesi, Rails jeneratörü tarafından oluşturulan tablo örneğindeki kaldırma sütunlarından biridir,
class RemoveAgeFromUsers < ActiveRecord::Migration
def up
remove_column :users, :age
end
def down
add_column :users, :age, :integer
end
end
Ayrıca burada bulunabilir Raylar için hızlı bir başvuru kılavuzu yaptım .
rails g migration RemoveXColumnFromY column_name:data_type
X = sütun adı
Y = tablo adı
DÜZENLE
Değişti RemoveXColumnToY
için RemoveXColumnFromY
yorum göre - göç aslında ne yaptığını daha netlik sağlar.
remove_column
içinde change
yöntemle tablodan sütun silmek için yardımcı olacaktır.
class RemoveColumn < ActiveRecord::Migration
def change
remove_column :table_name, :column_name, :data_type
end
end
Tam başvuru için bu bağlantıya gidin: http://guides.rubyonrails.org/active_record_migrations.html
Aşağıdaki gibi basit 3 adımda tablodan sütun kaldırmak için:
rails g migration remove_column_from_table_name
bu komutu terminal ve bu ad ve zaman damgası tarafından oluşturulan bir dosyada çalıştırdıktan sonra (remove_column from_table_name).
Sonra bu dosyaya gidin.
dosyanın içine yazmalısın
remove_column :table_name, :column_name
Sonunda konsola gidin ve
rake db:migrate
Heres raylar konsolundan bir tane daha
ActiveRecord::Migration.remove_column(:table_name, :column_name)
Sayesinde
remove_column :table_name, :column_name
bir geçiş dosyasındaki
Bir sütunu, aşağıdakileri yazarak doğrudan raylar konsolundan kaldırabilirsiniz:
ActiveRecord::Base.remove_column :table_name, :column_name
Bunu yapın;
rails g migration RemoveColumnNameFromTables column_name:type
yani rails g migration RemoveTitleFromPosts title:string
Her neyse, ActiveRecord veritabanı sütunlarını çalışma zamanında önbelleğe aldığından, çalışmama süresini de dikkate almak daha iyi olur, böylece bir sütunu bırakırsanız, uygulamanız yeniden başlatılana kadar istisnalara neden olabilir.
Ref: Güçlü göç
Basitçe, sütunu kaldırabilirsiniz
remove_column :table_name, :column_name
Örneğin,
remove_column :posts, :comment
up
vedown
yöntemlerde yaptığınızdan emin olunchange
.