我試圖使搜索很複雜的複雜搜索(當然,爲了使用戶更容易)有多種型號的Geokit使用Rails
我有一個應用程序有3種型號:廣告活動,企業和位置
像這樣:
\\ campaign.rb
belongs_to :business
has_many :locations, :through => :business
acts_as_mappable
\\ business.rb
has_many :campaigns
has_many :locations
\\ location.rb
belongs_to :business
has_many :campaigns, :through => :business
acts_as_mappable
這種設置方式,也有一些企業,有多個位置。對於那些沒有的,geokit信息被編碼到活動數據庫條目中。對於那些確實有多個位置的人,geokit信息被編碼到位置數據庫條目中。
我正在嘗試搜索將在特定距離內返回結果的廣告系列。處理擁有單一地址的企業時,這很簡單。
Campaign.find(:all,
:conditions => [blahblahblah],
:origin => address,
:within => distance
)
但是,我還想要包含屬於具有多個位置的企業的廣告系列。我想要搜索返回該廣告系列的結果,如果該業務具有多個位置,並且這些位置中的任何位置都在該範圍內。我在想:
Campaign.find(:all,
:include => [:business, :locations]
:conditions => [blahblahblah],
:origin => address,
:within => distance
)
但是,對於屬於具有多個位置的企業的廣告系列,這不會返回任何結果。當談到SQL時,我是一個noob,因此我不確定如何在一個模型(Campaign)中使用rails搜索,並搜索另一個模型(業務模型)以從Location模型中獲取結果。涉及geokit的事實使其變得更加複雜。
我想:在campaign.rb acts_as_mappable :through => :locations
,但它只是把SQL錯誤
我有一個多態模型「可尋址」搞砸左右,但我發現我幾乎必須從地面啓動的其他型號的控制器。
我也想過named_scopes,但我相信geokit不支持它們。
有什麼建議嗎?
你有使用Geokit?我創建了一個類似的搜索機制,用戶可以輸入多個位置和半徑,並在其邊界相交處顯示匹配。出於性能原因,我在SQL中進行所有計算。如果你認爲他們可能有所幫助,我會在以後發佈問題嗎 – dangerousdave 2011-01-26 15:31:17
我想我不必使用geokit,但計算似乎對我來說有點意思,更不要說地址轉換成lat,lng座標 – goddamnyouryan 2011-01-27 04:04:48