2010-06-26 25 views
7

ı bir "Kullanıcı" modelini oluşturmak için aşağıdaki komutu kullanılır diyelim:Güncellenmesi modelleri

script/generate model User username:string 

Bu kullanıcılar tablo oluşturmak için göç rb dosyasıyla birlikte user.rb dosyası oluşturur. Şimdi, Kullanıcı modelime bir e-posta sütunu eklemek istiyorum. Bunu yapmanın en iyi yolu nedir? Manuel olarak yapıp taşıma dosyasını el ile mi yazıyorsunuz yoksa bunu yapmak için bir kısayol var mı? Göç işlemini elle yazarsam, önceki geçişten sonra çalışıp çalışmadığını garanti etmek için önceki geçiş senaryosuyla aynı şekilde (öndeki bir zaman damgasıyla) adlandırmam gerekir mi?

cevap

6

damgası endişe etmeyin. Otomatik olarak üretilecektir. dosyası (yukarıda Raylar 2.1 ve için) formatında YYYYMMDDHHMMSS zaman damgasını olurdu

class AddEmailToUser < ActiveRecord::Migration 
    def self.up 
    add_column :email, :string 
    end 

    def self.down 
    remove_column :email 
    end 
end 

eklenmiş: Bir

script\generate migration add_email_to_user email:string 

Bu otomatik şu şekilde görünecektir bir geçiş dosyası yaratacak yapabilirsiniz dosya adının önünde.

2

Guide, geçişleri oluşturma hakkında bilgi sahibidir. Eğer raylar jeneratör kullanırsanız, doğru adlı dosyalar oluşturur: Henüz Bu her yerde konuşlandırılmış olmadıysanız

1) veya umursamıyorum:

ruby script/generate migration AddEmailToUser email:string 
1

Iyi iki şey yapabilirsiniz db'yi boşaltıp geçişlerinizi tekrar çalıştırıp dosyayı değiştirin. Tabloları db'nizden kaldırın ve db: geçirin. Bunu geliştirme aşamasında kolay.

2) Bu uygulama üretiliyorsa veya tüm tablolarınızı bırakmak istemiyorsanız. Ardından yeni bir taşıma dosyası oluşturun. Daha sonra bu yeni geçişte sütunu ekleyin/değiştirin/bırakın. Ardından db: migrat'ı çalıştırın ve yeni değişiklikler tablonuzda geçerli olacaktır. Bu en iyi uygulama.

Taşıma işleminiz için, zaman damgaları kullanılır; çünkü raylar, en son geçişleri izleyen bir tablo oluşturacaktır. Bunun için zaman damgalarını kullanmak daha iyidir. Ancak, isterseniz, zaman damgası yerine kendi sözleşmenizi kullanabilirsiniz. Belki bunlara 001_migration.rb, 002_migration.rb, vb. Ad veriniz.

Yardım edin.