2

我的网站上有一个相当复杂(或看起来如此)的基于 geokit 的位置搜索。简而言之,我有一个名为“Campaigns”的模型,它属于另一个名为“Businesses”的模型。当我在网站上搜索时,用户正在搜索“广告系列”,但如果他们搜索该广告系列公司名称,我希望所有合适的模型都显示在结果中。为此,我正在搜索中加入。

我还安装了 geokit 插件和 gem,以便用户只能在距原始位置(他们提供的)一定距离内获得这些搜索的结果。但是,当我将此位置功能添加到站点中时,我得到了奇怪的结果。

如果我使用以下搜索(为简洁起见进行了简化,但在控制台中进行了测试):

Campaign.find(:all, 
              :joins => :business, 
              :conditions => ['businesses.name LIKE ?', "%Koo Koo Roo%"]
             )

我得到了适当的结果,即:

[#<Campaign id: 12, user_id: 4, business_id: 8, created_at: "2011-01-14 16:22:31", updated_at: "2011-01-14 16:25:20", lat: #<BigDecimal:2ad295a9eda8,'0.34154891E2',18(18)>, lng: #<BigDecimal:2ad295a9ed08,'-0.118358834E3',18(18)>>]

但是,如果我尝试将基于 geokit 的位置搜索参数添加到此搜索中,如下所示:

Campaign.find(:all, 
              :joins => :business, 
              :origin => "90066", 
              :within => 25, 
              :conditions => ['businesses.name LIKE ?', "%Koo Koo Roo%"]
             )

我得到以下结果:

[#<Campaign id: 8, user_id: 4, business_id: 8, created_at: "2011-01-14 16:25:20", updated_at: "2011-01-14 16:25:20", lat: #<BigDecimal:2ad29933e618,'0.34154891E2',18(18)>, lng: #<BigDecimal:2ad29933e578,'-0.118358834E3',18(18)>>]

这几乎是相同的。唯一的区别是,对于第二个结果,它似乎将 business_id 作为 Campaign id 传递。我已经验证了两次,两次都是同一件事,活动 ID 被替换为 business_id。

我应该提一下,无论如何,这都是真的:在我进入的距离内。

我在这里做错了什么?我错过了什么吗?我似乎无法弄清楚,对我来说这一切看起来都很合理,但显然不是!我不明白 geokit 怎么会这样搞砸结果。

在我的模型中,我只有:

Business.rb
has_many :campaigns

Campaign.rb
belongs_to :business

任何帮助,将不胜感激。我是否缺少某种关联?我没有打开 geokit 缓存。

谢谢!

4

1 回答 1

0

这是因为“id”字段被狡猾的连接代码覆盖。当您加入时,您有两个“id”字段(一个用于业务,一个用于活动)。如果没有明确说明哪个是“the”id,DB 会猜测。

不幸的是,其中一个版本的 rails 有一个错误,它没有明确指出主 Active Record id(在本例中为 Campaign.id)是重要的 id……而 db 猜错了,覆盖id 与 Business.id。

您已经发现了简单(但更hacky)的修复方法……另一个是升级rails。

于 2011-03-22T16:06:38.863 回答