2009-04-23 3 views
2

이벤트 비용을 지정하는 사용자 입력 문자열이 있습니다 (예 : "비회원의 경우 $ 4"). 나는 비용의 상한 (그리고 하한) 경계를 파싱하려고 시도하고있다 (이 예에서, upper == lower == 4.00).무한대, 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은 부동 소수점을 무한대로 지원하지 않습니다. http://forums.mysql.com/read.php?39,220571,220573#msg-220573 –