2014-11-14 1 views
0

Thinking Sphinx gem이 있으며 현재 고급 검색 설정을 대체하기 위해 사용하고 있습니다.DOB 값에서 나이를 기준으로 사용자 검색

사용자 dob을 저장하고 사용자 모델의 나이로 변환합니다.

User.rb :

def age 
    now = Time.now.utc.to_date 
    now.year - birthday.year - ((now.month > birthday.month || (now.month == birthday.month && now.day >= birthday.day)) ? 0 : 1) 
end 

나는 사용자의 연령을 기준으로 검색을 구현 ​​추가하는 방법을 모르겠습니다. 예를 들어 방문객은 22에서 27 사이의 더블 박스에서 연령을 선택합니다. 22 세에서 27 세 사이의 사용자를 돌려 주어야합니다.

누군가가 예제를 제공 할 수 있다면 어떻게해야합니까?

답변

1

절약하기 전에 사용자의 dob를 나이로 변환 한 다음 DB에 나이를 저장하는 것이 더 좋지 않습니까? 컨트롤러에서 :create 또는 :update 메쏘드를 사용하는 동안 그 메쏘드를 실행하고 나이를 DB에 저장하십시오.

+0

예, 저는 그것에 대해 생각했지만 데이터베이스에 사용자 나이를 저장하지 말 것을 항상 권고했습니다. 나는 300,000 명 이상의 회원을 등록하려고 계획하고있다. 꿈이 있더라도. 그래서 나는 항상 내가하지 말라고 말한 것을 할 것입니다. 감사합니다 – xps15z

+0

괜찮습니다. 행운을 빌어 요! – aspencer8111

1

사용자가 입력 한 DOB 옆에 연령 열을 추가하고 모든 연령을 하루에 한 번 업데이트하는 트리거가 있어야합니다. BETWEEN을 사용하여 쉽게 색인을 생성하고 질의 할 수 있습니다.

0

생년월일을 타임 스탬프 특성으로 저장 한 다음 이후 나이/연령대에 유효한 첫 번째 및 마지막 날짜의 범위로 스핑크스 검색 결과를 필터링합니다.

이렇게하면 사용자 모델에 나이를 저장하지 않아도됩니다 (데이터베이스와 스핑크스에서 정기적으로 업데이트해야 함).