2013-11-25 3 views
0

그래서 내 생각 엔 스핑크스가 내 사용자 데이터베이스 검색을 처리하고 있습니다.Rails - 도우미를 통해 정의 된 나이를 색인화하는 스핑크스를 생각하십시오.

나는 그러나 내가 어떻게 할 수있는 인덱스 사용자의 나이를 알아낼 기운이 도우미 과정 유래의 (의례 :

def age 
    (Time.now.to_s(:number).to_i - dateofbirth.to_time.to_s(:number).to_i)/10e9.to_i 
end 

내 사용자 모델에 정의 내 데이터베이스와 시대에 생년월일 (DateOfBirth)이있다. NilClass '나는 User.rb

define_index do 
    indexes users 
    indexes :firstname, sortable: true 
    indexes :dateofbirth, sortable: true 
    indexes :location, sortable: true 
    end 

에 색인 해요 Heres는 어떻게 내가 오류는 전무에 대한'정의되지 않은 메서드`TO_TIME '입니다. 나는 나이 도우미에서 to_time을 볼 수 있지만 무엇을 해야할지는 여전히 안다.

+0

사용자 모델에서 나이가 들었습니까? 그렇다면 이것은 자기 진단이어야합니다. UsersHelper의 도우미 메서드 인 경우 인수를 받아 들여야합니다. – kddeisz

답변

1

스핑크스 - 리얼 타임 색인없이 Thinking Sphinx에서 사용하는 경우 SQL 문을 통해서만 데이터를 수집합니다. 레거시 define_index 메소드를 사용한다면 분명히 실시간 색인을 사용하지 않으므로 SQL 코드 조각을 통해 누군가의 나이를 나타내는 방법을 찾아야합니다.

This answer은 좋은 출발점이지만, MySQL 또는 PostgreSQL에 적용해야합니다 (거의 확실하게 그 중 하나를 사용하고 있으므로). 당신이 뭔가를 파악하면

, 당신은 다음과 같이 사용하여 색인에 추가 할 수있는 사항은 다음과 같습니다

define_index do 
    indexes users 
    indexes firstname, location, sortable: true 
    has "SQL SNIPPET GOES HERE", as: :age, type: :integer 
end 

has 방법은 속성이 자신의 특성상 정렬 때문에 사용되며, 내가 추측하고있어 텍스트 상자에서 나이를 검색하여 사용자를 다시 얻으려고하지 않습니까? 내가 틀린 경우 indexes으로 변경하고 type 옵션을 제거하십시오 (모든 입력란은 문자열 임).