2010-02-02 21 views
9

Raylar arası bir uygulamayı raylar için doğru formata dönüştürmek üzere bir geçiş yazıyorum - bazı nedenlerden dolayı tablolardan biri, id sütununda otomatik artışa sahip değil. Bir geçişte açmanın hızlı bir yolu var mı, belki change_column veya başka bir şeyle mi?Raylar geçişi ile eksik otomatik artış özniteliği yaratın

cevap

7

Bir SQL deyimi yürütmeniz gerekir.

statement = "ALTER TABLE `users` CHANGE `id` `id` SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT" 
ActiveRecord::Base.connection.execute(statement) 

Not Bu bir örnektir. Son SQL deyimi sözdizimi veritabanına bağlıdır.

+0

sayesinde @Simone Carletti sürü sorunu çözmek için bütün gün boşa, ama şimdi teşekkür DGM de postin için çözülmesi ve var g vakamın konusuna özgü bir soru. İkiniz de bana tekrar yardım edeceğinizi umuyoruz. Mutlu kodlama. – roarfromror

+0

Saklı yordamları kullanan raylarda çok fazla etkinlik bilmiyorum - bazı köşelerdeki raylar SQL'in daha güçlü yönleri için çok az şey kullanıyor, diğerleri bunu bilmiyor ... her neyse, en azından Bu aynı formu saklı yordamı oluşturmak için SQL yazmak için. – DGM

6

Eğer postgesql iseniz, tek bir istek bunu yapmayacaktır. Veritabanında yeni bir dizi oluşturmanız gerekecek.

create sequence users_id_seq; 

Sonra

alter table users 
    add id INT UNIQUE; 

Sonra id

alter table users 
    alter column id 
     set default nextval('users_id_seq'); 

Sonra id sütununu doldurmak için varsayılan değeri ayarlamak masanıza id sütununu ekleyin. çok sayıda tablo

update users 
    set id = nextval('users_id_seq'); 

bu postgresql kullanıcılara yardımcı Umut varsa bu ... oldukça uzun olabilir sizin için otomatik olarak her şeyi yapar serial türüne

+0

Teşekkürler! Bu çok yardımcı! –

İlgili konular