我的控制器中有以下内容:
def autocomplete
spots = Spot.where("name LIKE ?", "%#{params[:term]}%")
render :json => spots.map(&:name)
end
我认为这是:
<%= label_tag :term, "Term" %> <%= search_field_tag :term %>
...
$("input#term").autocomplete({
source: '<%= autocomplete_places_path %>',
minLength: 2,
delay: 500
});
我们说我有这组记录:
| id | name | address |
| 1 | Stall A | Fruity Road |
| 2 | Stall B | Chinky Street |
| 3 | Restroom | White Garden |
当我搜索stall
时,会显示记录1
和2
。
我想要实现的是,当我搜索stall fru
时,只显示记录1
。目前,如果我搜索这个词,就不会显示任何记录。
我知道我必须重写查询,但我该怎么做呢?
非常感谢。
答案 0 :(得分:0)
您尝试在新解决方案中实施的内容称为“全文搜索”。
有许多宝石可以帮助您实现这一目标,但它们现在超出了这个答案的范围。这个S / O问题链接到完成工作的一堆宝石:Full Text Searching with Rails
或者,我建议谷歌搜索“rails gems全文搜索” - 你会得到很多不同的结果。
评论中提到的“挤两根柱子”方法快速而简单,并且适用于上面提到的两个例子,例如“stall fru”和“fruity”,但如果你试过的话可能找不到任何东西“水果摊”。这对你来说可能没有问题。
根据您使用的数据库,可能还有一种在数据库上执行此操作的本地方法。 要了解更多信息,请使用谷歌搜索“全文搜索”