![](/img/trans.png)
[英]Rails: complex search on 3 models, return only newest - how to do this?
[英]Complex Search with Multiple Models and Geokit using 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,我是一個菜鳥,所以我不確定如何在一個模型(廣告系列)中搜索rails,並在另一個模型(業務模型)中進行搜索以從Location模型中獲取結果。 涉及geokit的事實使其更加復雜。
我試過了:campaign.rb中的acts_as_mappable :through => :locations
,但是它只是拋出了一個SQL錯誤
我把“可尋址”的多態模型弄亂了,但是我發現我幾乎必須從其他模型的控制器開始。
我也考慮過named_scopes,但我相信geokit不支持它們。
有什么建議么?
如果您認為模型過於復雜,則表明它需要重新設計。
可以開展沒有生意的競選活動嗎? 如果不是,那么如果業務已經具有可映射的位置,則使活動act_as_mappable(假設您的活動數據庫具有lat和lng列)沒有意義。
如果廣告系列與具有多個位置的企業相關聯,那么該廣告系列的位置是什么? 您在campaigns.lat和lng屬性中存儲了什么?
如果您堅持使用數據模型,建議您將搜索分為多個命令:
def find_campaigns_near(origin,distance)
locations = Location.find(:all,
:origin => address,
:within => distance
);
# use Hash for uniqueness based on id
campaigns = Hash.new
locations.each do |location|
location.campaigns.each do |campaign|
campaigns[campaign.id] = campaign if campaigns[campaign.id].blank?
end
end
campaigns
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.