2010-11-19 10 views
0

aşağıdaki bazı tavsiye arıyorum:Rails Devs Handle Modeli/Varsayılan Değer Sorunları Nasıl Çalışır?

  1. Bir uygulama yeni özellikler geliştirmeye de, bir sütun eklemek gerekir müşteriler ve gerçek veriler
  2. yaşamak zorunda sağlar ki projeler tablo
  3. Bu yeni sütun Bunların hepsi taşınan yeni projeler için çalışıyor bir before_save

kullanılarak model tarafından oluşturuyor bazı tip bir UID olduğunu. Ama mevcut tüm projeler o sütun için sıfır ve her şey kırılıyor.

Rails dünyasında onunla nasıl başa çıkıyorsunuz?

Teşekkür

cevap

2

Bunun bir Rake görevinden ziyade, taşıma komut dosyası içinde ele alınması gerektiğini düşünüyorum.

Eğer doğru anlıyorsam, sütunun geçmiş kayıtlara eklendiği anda yalnızca bir kez gerçekleştirilmesi gerekecek. Aklımda, bir taşıma komut dosyası uygulamayı kırık bir veri kümesiyle bırakmamalıdır. Göçler, yalnızca şema değişikliklerinden daha fazlası için tasarlanmıştır.

def self.up 
    change_table :projects do |t| 
    t.integer 'new_column' 
    end 

    Project.reset_column_information 

    Project.all.each do |project| 
    project.new_column = some_value 
    project.save 
    end 
end 

reset_column_information yöntemin eklediğiniz yeni sütunun farkında Raylar yapar:

İşte bir örnek.

+0

Bu temiz seviyorum. Bir dağıtımda daha az hatırlamak, daha güvenli görünüyor. Teşekkür ederim Steve. – AnApprentice

3

Sadece bir UID ve her bir projeye biri olmadan tüm projelerde çeker bir tırmık görev oluşturabilir.

Taşıma işlemini çalıştırdıktan sonra görevi çalıştırın. Tüm projelerinizin bir UID'si olmalı.

+0

Anlaşmalı. Eğer bu bir zaman meselesiyse, genellikle göçle ilgili olarak yakından ilgilendiğim için genellikle göçmenlik görevinde alacağınız kodu koyarım. Alternatif olarak, bu sütunun nil değerlerine izin verirseniz, uygulamanızın bu sütuna referans veren ve uygun şekilde işleyen bölümlerini değiştirirsiniz (nil'i kontrol edin). Bir komisyon görevi oluşturmayı öneren – johnmcaliley

+0

+1. Ben öyle yaptım. :) – Alex

+0

Herkese teşekkürler. Ben yeni bu yüzden bu yararlıdır, ancak Google üzerinden bu konu hakkında herhangi bir öğretici görünmüyor .... Nerede raylar dir bir tane komisyon görevlerini depolar ki ben onları Heroku'da çalıştırabilir miyim? Ayrıca, bir komisyon görevi için temel yapıyı veya düzeni gösteren cevabınızı herhangi bir şekilde güncelleyebildiniz mi? – AnApprentice