簡體   English   中英

使用Rails進行多種模型和Geokit的復雜搜索

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM