2011-01-16 3 views
2

내 사이트에서 geokit 기반 위치 검색이 다소 복잡합니다. 요컨대, 나는 "사업"이라는 다른 모델에 속하는 "캠페인"이라는 모델을 가지고 있습니다. 사이트에서 검색 할 때 사용자는 '캠페인'을 검색하지만 해당 캠페인 비즈니스 이름을 검색하면 결과에 모든 적절한 모델이 표시되기를 바랍니다. 이를 위해 검색에서 조인을하고 있습니다.geokit 문제를 사용하여 레일스에서 ​​위치 기반 검색

사용자가 geofit plugin과 gem을 추가로 설치하여 사용자가 원산지 (지정된 위치)에서 설정된 거리 내에서만 검색 할 수 있도록합니다. 그러나이 위치 기능을 사이트에 추가하면 이상한 결과가 발생합니다. 나는 다음과 같은 검색을 사용하는 경우

(간결 간단하지만, 콘솔에서 테스트) : 내가하려고하면

[#<Campaign id: 12, user_id: 4, business_id: 8, created_at: "2011-01-14 16:22:31", updated_at: "2011-01-14 16:25:20", lat: #<BigDecimal:2ad295a9eda8,'0.34154891E2',18(18)>, lng: #<BigDecimal:2ad295a9ed08,'-0.118358834E3',18(18)>>] 

그러나 :

Campaign.find(:all, 
       :joins => :business, 
       :conditions => ['businesses.name LIKE ?', "%Koo Koo Roo%"] 
      ) 

내가이 적절한 결과를 얻을 다음과 같이 geokit 기반 위치 검색 매개 변수를이 검색에 추가하십시오.

Campaign.find(:all, 
       :joins => :business, 
       :origin => "90066", 
       :within => 25, 
       :conditions => ['businesses.name LIKE ?', "%Koo Koo Roo%"] 
      ) 

다음과 같은 결과가 나타납니다. t :

[#<Campaign id: 8, user_id: 4, business_id: 8, created_at: "2011-01-14 16:25:20", updated_at: "2011-01-14 16:25:20", lat: #<BigDecimal:2ad29933e618,'0.34154891E2',18(18)>, lng: #<BigDecimal:2ad29933e578,'-0.118358834E3',18(18)>>] 

거의 동일합니다. 유일한 차이점은 두 번째 결과에서 business_id를 Campaign ID로 전달한 것으로 보입니다. 나는 이것을 두 번 확인했으며 두 번 모두 똑같은 경우 캠페인 id가 business_id로 바뀝니다.

내가 언급해야 할 것은 이것이 무엇이든 상관 없다는 것입니다.

내가 뭘 잘못하고 있니? 내가 놓친 게 있니? 나는 그것을 이해하는 것처럼 보일 수 없다. 그것은 나에게 소리가 날 것으로 보인다. 그러나 명백하게 그렇지 않다! geokit이 결과를 어떻게 망칠 수 있었는지 이해할 수 없습니다. 내 모델

는 단순히 있습니다

Business.rb 
has_many :campaigns 

Campaign.rb 
belongs_to :business 

어떤 도움

주시면 감사하겠습니다. 나는 일종의 결사를 놓치고 있습니까? 지토 킷 캐싱이 켜져 있지 않습니다.

감사합니다!

+0

나는 이것을 알아 냈습니다. 단순히 '조인'을 '포함'으로 변경하는 문제였습니다. 왜 이것이 제대로 작동하는지 잘 모르겠지만 geokit github 페이지에서 geokit에 조인 문제가 있다고 읽었습니다. 그래서이를 변경하고 겉으로는 효과가 있습니다! – goddamnyouryan

답변

0

"id"필드가 dodgy join 코드로 덮어 쓰여지고 있기 때문입니다. 가입하면 두 개의 "id"필드 (비즈니스 용과 캠페인 용)가 있습니다. 어떤 "the"id인지에 대한 명시적인 지시없이 DB는 추측합니다.

불행히도 레일 버전 중 하나에는 주 활성 레코드 ID (이 경우 Campaign.id)가 중요하다고 생각하는 ID가 명시되어 있지 않은 버그가 있으며 데이터베이스가 잘못된 ID로 Business.id의 id를 덮어 씁니다.

당신은 이미 쉬운 (그러나 더 해커가없는) 해결책을 발견했습니다 ... 다른 하나는 레일을 업그레이드하고 있습니다.