2012-10-26 23 views
0

有没有一种方法可以同时搜索where条件和near条件,显示两者的结果。基本上,我想要一个搜索栏,用户可以输入一个人的姓名,但他们也可以输入一个位置,并且搜索会显示匹配两者的结果。我尝试了where查询,然后单独的近查询,并循环遍历Geocoded结果并将它们添加到主结果中,但这会产生重复并且不太理想。有任何想法吗?Rails搜索同时在哪里和地理编码

回答

1

您使用哪种地理编码gem?我的猜测是,您可以执行query.where而不是query.where.near,您可以在其中设置near选择器生成的等效选项。

这是一个不同的问题,理论上正交于你提出的问题......但是你的控制器在查询传递到ActiveRecord之前作出任何决定?例如,如果用户键入New York, NY,您的控制器是否“猜测”它是位置?或者只是尝试进行名称匹配搜索和地理编码尝试,无论输入是什么?我这样问,因为如果你解析出输入,你可能会得到这个if/else情况,其中if query is a location, do a geocodeelse do a search by name

我想知道是否合理的设计是在搜索数据库之前有一个不区分个人姓名和位置名称的搜索框,但也许您有一个创造性的用例。

+0

你说得很好。我正在使用[geocoder gem](https://github.com/alexreisner/geocoder)和[这是网站](http://whoseyourlandlord.com/)。在传递到ActiveRecord之前判断查询是否是位置的问题是,如果用户搜索大学,他们可能会放入马里兰州,匹配名称“马里兰大学”,但也是一个位置。如果确定马里兰州是一个地点,马里兰大学可能不会被发现,取决于邻近地区。 – nikorablin

+1

啊...那么也许你想打破搜索功能,以便键入部分名称为大学提供自动完成。例如,从“Uni ...”或“Maryl ...”开始提供包括“马里兰大学”在内的选项。另外,考虑到您必须添加额外的逻辑(以及可能的数据库命中),我想您必须评估全向搜索框是否真的增加了更多的灵活性。 – Zando