2015-05-31 32 views
6

içinde sonsuz şamandıralar kullanma SQLite3 kullanan bir Rails uygulamasında, kayan nokta özniteliğine sahip bir modelde Float::INFINITY ve -Float::INFINITY kayan değerleri kullanmak istiyorum. INSERT sorgularını Model.create! kullanarak çalıştırmak, bu iyi çalışıyor çünkü activerecord bu durumda hazırlanmış ifadeler kullanıyor. Ben foo.save kullanarak bir kaydı güncelleştirmeye çalıştığınızda Ancak, activerecord hazırlanmış bir stament kullanmaz ve sadeceRuby on Rails

SQLite3::SQLException: no such column: Infinity 

sonuçlanan sağ sorguda dize Infinity koyar bu geçici veya yapmak için bir yolu var mı Model/veritabanında dizeleri kullanmaya başvurmalıyım?

Raylar sürüm 3.2.21, SQLite3 versiyonu 1.3.10


Düzen. Şimdilik ben veritabanı göç string için sütun türünü değiştirdi ve sadece iyi Float::INFINITY saklamak için izin veritabanında YAML tefrika yüzer saklamak için ActiveRecord anlatmak için

serialize :property, Float 

kullanın.

cevap

0

Bu, raylarda Float::INFINITY 1.0/0 olarak tanımlandığından, sqlite3 bununla ne yapacağını bilmez. 9e999 gibi sonsuzluğu tanımlamak için çok büyük bir sayı kullanabilirsiniz.

+1

Hayır, [IEEE754] (http://en.wikipedia.org/wiki/IEEE_floating_point) veritabanına kaydedeceğiniz değer + ∞ ve −∞ isimli float değerlerini tanımlar. Onu geriye aldınız, '1.0/0' Float :: INFINITY 'olarak tanımlandı. Bir özniteliği '9e999' olarak ayarlamak, değişkenin 'Float :: INFINITY' olarak ayarlanmasını sağlar, dolayısıyla aynı SQLite3 hatasını alırım. – Christoph

+1

Bunun için üzgünüz. Ben şamandıra aşina değilim :) Bu fikir, sonsuzluk için bir yedek olarak çok büyük bir sayı denemek için. Neyse, 'Float :: MAX' kullanmayı denediniz mi? Sadece keşfetti ve bundan daha büyük sayıların yakutta sonsuzluğa eşit olduğunu biliyordu. –