Taşıma dosyası oluştururken varsayılan değer atama


105
rails generate migration AddRetweetsCountToTweet retweets_count:integer 

Tamam, veri türü tamsayısı olan bir Tweet modeline bir sütun eklemek için oluşturulan dosyada otomatik olarak kod oluşturan taşıma dosyası oluşturmak için yukarıdaki satırı kullanıyorum. Şimdi, geçiş dosyasını oluştururken eklenen sütuna varsayılan değer eklemek istiyorum. Mümkün mü? Google'da araştırdım ama bulamadım. Erkeklerin yardıma ihtiyacı var.


konuyla ilgili RailsGuide'a bakın: guides.rubyonrails.org/migrations.html aradığınız bilgiler, Anatomy of a Migration
Austin Lin

1
Ne demek istediğini tam olarak biliyorum. Ben de varsayılan bir değer belirlemeye çalıştım ve bilgi bulmaya çalışmak bir tür acı oldu. Sadece çıplak SQL oluşturmak daha kolaydı, ancak o zaman sürüm kontrolünde geçiş olmaz.
Tass

Yanıtlar:


167

Varsayılan geçiş oluşturucu varsayılan değerleri işlemez ( sütun değiştiriciler desteklenir ancak defaultveya içermez null), ancak kendi oluşturucunuzu oluşturabilirsiniz.

Ayrıca rake db:migrate, seçenekleri ekleyerek çalıştırmadan önce taşıma dosyasını manuel olarak güncelleyebilirsiniz add_column:

add_column :tweet, :retweets_count, :integer, :null => false, :default => 0

... ve Rails API'yi okuyun


9
Tamam, cevap için teşekkürler. Varsayılan geçiş oluşturucunun, varsayılan değerleri belirtmek için oluşturulduktan sonra geçiş dosyasını düzenlememe gerek kalmaması için varsayılan değerleri işleme seçeneği sunmasının harika olacağını düşündüm.
kxhitiz


10

Evet, taşıma oluşturucu komutunda 'varsayılan'ı nasıl kullanacağımı da göremedim, ancak oluşturulan taşıma dosyasını "rake db: migrate" uygulamadan önce değiştirerek aşağıdaki gibi yeni bir dize sütunu için varsayılan bir değer belirleyebildim:

class AddColumnToWidgets < ActiveRecord::Migration
  def change
    add_column :widgets, :colour, :string, default: 'red'
  end
end

Bu, "Widget" modelime "renk" adlı yeni bir sütun ekler ve yeni widget'ların varsayılan "rengini" "kırmızı" olarak ayarlar.


(Bu, Rails 4.2'de idi.)
MSC

4

Tüm tabloyu oluşturmak için taşıma dosyasında t.boolean: active,: default => 1 denedim. Db'yi kontrol ettiğimde bu geçişi çalıştırdıktan sonra boş olarak yapıldı. Varsayılanı "1" olarak söylememe rağmen. Bundan sonra, taşıma dosyasını biraz değiştirdim, sonra tablo geçiş dosyası oluşturmada varsayılan değeri ayarlamak için benim için çalıştı.

t.boolean: etkin,: null => false,: varsayılan => 1. Benim için çalıştı.

My Rails çerçeve sürümü 4.0.0


:default => false?
Christopher Oezbek

2

Öncelikle model temelleri için geçişinizi oluşturmanız, ardından değişim_sütununu kullanarak öncekinizi değiştirmek için başka bir taşıma oluşturmanız gerekir ...

def change
    change_column :widgets, :colour, :string, default: 'red'
end
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.