In un'applicazione Rails che utilizza SQLite3 Vorrei utilizzare i valori float Float::INFINITY
e -Float::INFINITY
in un modello con un attributo a virgola mobile. L'esecuzione delle query INSERT
utilizzando Model.create!
sembra funzionare correttamente, dal momento che activerecord utilizza istruzioni preparate in questo caso. Tuttavia, quando si tenta di aggiornare un record utilizzando foo.save
, ActiveRecord non usa uno stament preparato e appena mette la stringa Infinity
destra nella query, con conseguenteUtilizzo di flottanti infiniti in Ruby on Rails
SQLite3::SQLException: no such column: Infinity
C'è un modo per aggirare questo o fare Devo ricorrere all'utilizzo di stringhe nel modello/database?
Rails versione 3.2.21
, versione SQLite3 1.3.10
Modifica. Per ora ho cambiato il tipo di colonna per string
nella migrazione di database e utilizzare
serialize :property, Float
dire ActiveRecord per memorizzare carri YAML-serializzati nel database, che consente di memorizzare Float::INFINITY
bene.
No, [IEEE754] (http://en.wikipedia.org/wiki/IEEE_floating_point) esplicitamente definisce i valori float chiamati + ∞ e -∞. L'hai ottenuto all'indietro, '1.0/0' è definito come' Float :: INFINITY'. Impostando un attributo a '9e999' si ottiene che la variabile sia impostata su' Float :: INFINITY', quindi ottengo lo stesso errore SQLite3. – Christoph
Mi dispiace per quello. Non sono così familiare con float :) L'idea è solo quella di provare un numero molto grande come sostituto dell'infinito. Ad ogni modo, hai provato a utilizzare 'Float :: MAX'? L'ho appena scoperto e sapevo che i numeri più grandi di questo equivalgono all'infinito nel rubino. –