2011-02-14 65 views
3

使用以下配置在相關模型上定義索引的正確方法是什麼?使用Thinking Sphinx定義相關模型的索引

我有latlng屬性和關聯模型ProfileUser

class User < ActiveRecord::Base 
    has_one :user_profile 

    define_index do 
    # This doesn't work :(
    has "RADIANS(user_profiles.localities.lat)", :as => :lat, :type => :float 
    has "RADIANS(user_profiles.localities.lng)", :as => :lng, :type => :float 
    end 
end 

end 

class UserProfile < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :locality 
end 

class Locality < ActiveRecord::Base 
    has_many :user_profiles 
end 

我需要定義用戶模型,這樣我就可以在其上進行地理搜索索引模型Locality

謝謝你的答案!

回答

10

的問題是雙重的:

  • 思考獅身人面像不知道你想加入user_profile和地方協會。
  • SQL片段應該就是這樣 - 標準的SQL - 所以你不能鏈接它們中的關聯。

下應該做的伎倆:在SQL中使用單數引用的

define_index do 
    # force the join on the associations 
    join user_profile.locality 

    # normal SQL: 
    has "RADIANS(localities.lat)", :as => :lat, :type => :float 
    has "RADIANS(localities.lng)", :as => :lng, :type => :float 
end 

克勞迪奧的觀點是不正確的 - SQL中,你想要的表名。但是你確實需要在聯合調用中正確的關聯引用(因此它們在那裏是單數的)。

乾杯

+0

太棒了,對不起,我已經創造了困惑:) – 2011-02-14 23:59:48

1

真的不知道確切的解決方案,但:

你有一個錯字:

has_one :user_profile 

define_index do 
    # This doesn't work :(
    has "RADIANS(user_profiles.localities.lat)", :as => :lat, :type => :float 

您正在使用「user_profiles」的屬性,它不應該是多元的,嘗試將其更改爲: 「用戶資料」。

我再說一遍,我不知道你是否可以瀏覽這個案例的關聯,但如果可以的話,這應該是一個錯字。

你可以在這裏閱讀以瞭解更多信息:http://freelancing-god.github.com/ts/en/geosearching.html

+0

我試圖引用表名。帕特的答案解決了這個問題,無論如何,謝謝! – 2011-02-15 09:21:53

相關問題