2010-06-23 17 views
14

Bunu Google'da arama yaparak anlayamıyorum.Rails'in geçişi MySQL'in "double" veri türüne eşdeğerdir?

double türünde bazı sütunları olan varolan bir veritabanım var, eşdeğer bir sütun türü oluşturmak için raylarımda ne yazabilirim? Oldukça eski bir veritabanı ve tamamen kullanmak için belki de daha uygun bir veri türü var, ama başkalarının ne düşündüğünü görmek istedim.

:decimal türünü kullanacağım, bu en iyi seçim mi?

Düşünceler?

sayısal (tamsayı/ondalık/şamandıra) sütunu tanımları bir tamsayı sütun türü bayt sayısı için :limit seçeneğini kullanın: çift için özel bir türü de vardır

cevap

10

, Raylar bu konuda akıllı olmaya çalışır ve floatlar için :scale/:precision seçenekleri.

(hassas anlamlı basamak sayısı olduğu; ölçekli ondalık noktadan sonraki bu düşüşün kaç budur.)

8

Sen Raylar bir DOUBLE oluşturmak için alabilirsiniz. Aşağıdaki çözümü "resmi olarak" nasıl desteklediğinden emin değilim, ancak MySQL için çalışıyor. Sadece 53. ör .:

t.float :published_at, :limit => 53, :null => true

sınırı ayarlamak ben this blog post gelen cevabı var ve orada bu ilgili biraz daha test sonuçları vardır.

+0

yok mu) 5.1 kullanıyorum Benim için çalış, sınır soyulmuş ve schema.rb (Rails 4.0) içinde mevcut değil – gamov

4

Bu çözümle ilgili bir sorun görüyorum. Böyle bir deklarasyon varsa:

t.float :latitude, :limit => 30 

her şey harika görünüyor: veritabanı şeması sütun çift olarak ilan edilir gösterir. Sorun şema.rb'nin herhangi bir sınır değerinden yoksun olmasıdır, bu yüzden şema test ortamına klonlandığında, sütun bir çift yerine bir yüzer hale gelir. Birim testleri başarısız çünkü sütunda yeterli doğruluk yok. maksimum sütun uzunluğunu İstekleri - limiti:

: Eğer ActiveRecord column definitions için docs bakarsak

ne bulmayı budur. Bu, karakterlerinin sayısıdır: string ve: metin sütunları ve için bayt sayısı: ikili ve: tamsayı sütunları.

Şamandıralar konusunda sessiz. Koddan şöyle bir yan etkisinin nasıl göründüğü: Limit bu çözümün çalıştığı desteklenir. Schema.rb neslinde bir hata var gibi görünüyor ya da hiç bu şekilde kullanılmak üzere tasarlanmamıştı.

Korkarım cevap şu olabilir: ondalık veri türü (umurumda değil) tamamen desteklenen bir çözümdür. mysql2 (0.3 ile

MySQL (: my durumda

20

(test-db hazırlanması için).11) sürücü):

double(64,12) 

Raylar (db/schema.rb): Rayların Modern sürümlerinde

t.float :limit=>64     ==> failed 
    t.float :limit=>53     ==> occasionally succeeded 
    t.decimal :precision=>64, :scale=>12 ==> fully succeeded 
1

(I

t.column :field, "double"