2009-04-23 17 views
2

私は、イベントのコストを指定するユーザー入力文字列を持っています(例: "非会員の場合は$ 4")。私はコストの上限(および下限)を解析しようとしています(この例ではupper == lower == 4.00)。Infinity、ActiveRecord、MySQL:ストレージと比較

与えられた文字列を解析できないとします(おそらく空白です)。この場合、イベントの最大コストが無限大(最小値0)であることをデータベースに保存できるようにしたいと考えています。どうすればMysqlとActiveRecordを使ってこれを行うのですか?私が試した何

> e = Event.find(1234) 
> e.cost_max = 1.0/0.0 
> e.save 
ActiveRecord::StatementInvalid: Mysql::Error: Unknown column 'Infinity' in 'field list': UPDATE `events` SET `cost_max` = Infinity WHERE `id` = 1234 

は、私はまた、代わりに、NULLでcost_maxをマークしようとしました。これは原則として機能します。しかし、私はUltrasphinxフィルターを使用して、コスト範囲に検索範囲との交差点が空でないイベントを取得しています。 Ultrasphinxフィルタはハッシュだけの条件を受け入れるよう(私が間違っている?)、私のオプションは、これに限定されています

search_params[:filter].merge!(:cost_max => 0.0..99) 

意味は、無許可「OR cost_maxがNULLです」。

答えて

2

フィールドタイプがdoubleの場合は、無限大の値を格納できるようです。

VALUE('1e500'); 

次に、これを比較の上限として使用するだけです。

詳細については、mysqlメーリングリストのthis threadを参照してください。

+0

二重にすることはできませんが、二重ではありません。現在はフロートです。 mysqlはそのfloatの無限をサポートしていないようです: http://forums.mysql.com/read.php?39,220571,220573#msg-220573 –