【发布时间】:2011-06-15 01:10:47
【问题描述】:
我试图让搜索变得非常复杂(当然,为了让用户更容易)
我有一个包含 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 时,我是个菜鸟,所以我不确定如何在一个模型(Campaign)中进行 Rails 搜索,并在另一个模型(Business 模型)中搜索以从 Location 模型中获取结果。涉及到 geokit 的事实使它变得更加复杂。
我在campaign.rb中试过:acts_as_mappable :through => :locations,但它只是抛出了一个sql错误
我搞砸了一个“可寻址”的多态模型,但我发现我几乎必须从头开始研究其他模型的控制器。
我也考虑过named_scopes,但我相信geokit 不支持它们。
有什么建议吗?
【问题讨论】:
-
你必须使用 Geokit 吗?我创建了一个类似的搜索机制,用户可以在其中输入多个位置和半径,并在其边界相交处显示匹配项。出于性能原因,我在 SQL 中进行所有计算。如果您认为它们可能会有所帮助,我会稍后发布查询?
-
我想我不必使用 geokit,但计算对我来说似乎有点复杂,更不用说将地址转换为 lat,lng 坐标
标签: sql ruby-on-rails search model geolocation