W aplikacji Rails przy użyciu SQLite3 Chciałbym użyć wartości float Float::INFINITY
i -Float::INFINITY
w modelu z atrybutem zmiennoprzecinkowym. Uruchamianie zapytań INSERT
przy użyciu wydaje się działać dobrze, ponieważ activerecord używa w tym przypadku przygotowanych instrukcji. Jednak przy próbie aktualizacji rekordu przy użyciu foo.save
, activerecord nie używa przygotowaną stament i po prostu umieszcza ciąg Infinity
prawo w zapytaniu, w wynikuUżywanie nieskończonych obiektów pływających w Ruby on Rails
SQLite3::SQLException: no such column: Infinity
Czy istnieje sposób, aby obejść ten problem, czy Muszę uciekać się do używania ciągów w modelu/bazie danych?
Szyny wersja 3.2.21
, SQLite3 wersja 1.3.10
Edit. Na razie zmieniłem typ kolumny do string
w migracji bazy danych i używać
serialize :property, Float
powiedzieć ActiveRecord do przechowywania YAML-odcinkach pływaków w bazie danych, co pozwala na przechowywanie Float::INFINITY
dobrze.
Nie, [IEEE754] (http://en.wikipedia.org/wiki/IEEE_floating_point) jawnie definiuje wartości zmiennoprzecinkowe o nazwach + ∞ i -∞. Masz go w tył, '1.0/0' jest zdefiniowany jako' Float :: INFINITY'. Ustawienie atrybutu na '9e999' powoduje, że zmienna jest ustawiana na' Float :: INFINITY', stąd pojawia się ten sam błąd SQLite3. – Christoph
Przepraszam za to. Nie jestem zaznajomiony z floatem :) Chodzi o to, aby wypróbować bardzo dużą liczbę jako zamiennik nieskończoności. W każdym razie, czy próbowałeś użyć 'Float :: MAX'? Właśnie odkrył to i wiedział, że liczby większe niż to równa się nieskończoności w rubinie. –