我的网站上有一个相当复杂(或看起来似乎)基于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缓存。
谢谢!
答案 0 :(得分:0)
这是因为“id”字段被狡猾的连接代码覆盖。当你加入时,你有两个“id”字段(一个用于商业,一个用于活动)。没有关于哪个是“id”的明确指示,DB猜测。
不幸的是,其中一个版本的rails有一个错误,它没有明确声明主Active Record id(在本例中为Campaign.id)是重要的id ...并且db猜错了一,用Business.id覆盖id。
你已经发现了一个简单的(但更多的是hacky)修复程序......另一个是升级rails。