Infinity, ActiveRecord и MySQL: хранение и сравнение - PullRequest
2 голосов
/ 23 апреля 2009

У меня есть пользовательские строки ввода, указывающие стоимость события (например: «$ 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" не допускается.

Есть идеи?

1 Ответ

2 голосов
/ 23 апреля 2009

Если тип поля - double, кажется, что вы можете хранить значения бесконечности.

VALUE('1e500');

Тогда это просто вопрос использования этого в качестве верхней границы для сравнения.

Для получения дополнительной информации см. эту ветку в списках рассылки mysql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...