繁体   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