2

イベントの費用を指定するユーザー入力文字列があります (例: 「非会員は $4」)。コストの上限 (および下限) を解析しようとしています (例ではupper == lower == 4.00)。

特定の文字列を解析できないとします (おそらく空白です)。この場合、イベントの最大コストが無限 (および最小 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

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

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

つまり、「OR cost_max is NULL」は許可されません。

何か案が?

4

1 に答える 1

2

フィールド型が a の場合、double無限値を格納できるようです。

VALUE('1e500');

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

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

于 2009-04-23T17:40:44.500 に答える