2011-08-26 13 views
38

sütunuyla ilişkili dizinler kaldırılıyor Rails 2'de, Rails geçişi olan bir sütunu kaldırmak da sütunla ilişkili dizinleri değiştirir/kaldırır? Değilse ve bunun yerine, her bir dizini manuel olarak değiştirmeli/kaldırmalısınız, bunun yerine otomatikleştirilmemelidir?Rails geçişi olan bir sütunu kaldıracak

+0

mutlaka doğrudan ancak soruma cevap vermez ilginç bir yazı var: http://keyj.wordpress.com/2009/05/28/remove-index-with-rails-migrations/ –

+4

Güncelleme: Şu anda, dizini kaldırır (Rails 4.1.7). MySQL 5.1 için –

cevap

24

(Rails yeni başlayanlardan)

Teşekkür Hayır, ne yazık ki remove_index yöntemi kullanarak göç içinden elle indeksi kaldırmak gerekir.

+6

(en azından) durum böyle görünmüyor. Bakınız: http://stackoverflow.com/a/4341928/ – Tyler

+0

Bu bağlantı için teşekkürler @Tyler –

+4

Raylar 4'de şu anda var: http://stackoverflow.com/a/27622694/407213 (örneğin: Denedim ve sonra remove_column ... ',' remove_index ... ', '' Index name '...' 'atar' ... '' yok '<3) – Dorian

5

2 sütun indeksi kaldırmak için sözdizimi göç içinde netleştirmek için aşağıdaki

remove_index :actions, :column => [:user_id,:action_name] 

veya adıyla

, Raylar 4 itibaren görünümü

remove_index :actions, :name => "index_actions_on_user_id_and_action_name" 
41

benim açımdan kötü seçenek yukarı doğru, dizin, sütun kaldırma ile otomatik olarak kaldırır.

5

Sadece bir uyarı olarak, Rails 4 dizinini kaldırırsanız, sütunu kaldırırsanız, dizin türünü belirtmeniz gerekir. Bir sütun türü olmadan, çalışan rake db:rollback ben endeksli edildi yabancı anahtar sütunları bırakarak deneme yapıldı

rake aborted! 
StandardError: An error has occurred, all later migrations canceled: 

remove_column is only reversible if given a type. 

dönecektir. Değişiklik bloğundaki index: true belirtilmesi bile geri alma sırasında sütunların geri alınabilir olmasını sağlamaz.

0

Raylar> 3.2.16'da, sütunu kaldırmak dizini kaldırır.

0

Dizini kaldırmak isterseniz remove_index kullanmanız gerekir, remove_column kullanırsanız dizini kaldırır ancak komisyon db: rollback komutunu çalıştıramazsınız. Jim'in bahsettiği gibi. Burada arada

remove_column is only reversible if given a type. 
İlgili konular