1

我的控制器中有以下内容:

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时,记录12显示。

我想要实现的是,当我搜索时stall fru,只会1显示记录。目前,如果我搜索此术语,则不会显示任何记录。

我知道我必须重写查询,但我该怎么做呢?

非常感谢。

4

1 回答 1

0

您尝试在新解决方案中实施的内容称为“全文搜索”。

有许多宝石可以帮助您实现这一目标,但它们目前超出了此答案的范围。这个 S/O 问题链接到可以完成这项工作的大量 gem:Full Text Searching with Rails

或者,我建议使用谷歌搜索“rails gems full text search”——你会得到很多不同的结果。

评论中提到的“将两列挤在一起”的方法既快捷又简单,适用于上面提到的两个例子,例如“stall fru”和“fruity”,但如果你尝试“fruity stall”,可能找不到任何东西”。这对你来说可能会也可能不会。

根据您使用的数据库,可能还有一种在您的数据库上执行此操作的本机方式。要了解更多信息,使用的谷歌搜索将是“全文搜索”

于 2012-09-07T06:45:41.827 回答