使用like搜索多个字段,不带任何参数顺序

时间:2012-05-02 14:53:25

标签: sql ruby-on-rails autocomplete

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

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。目前,如果我搜索这个词,就不会显示任何记录。

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

非常感谢。

1 个答案:

答案 0 :(得分:0)

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

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

或者,我建议谷歌搜索“rails gems全文搜索” - 你会得到很多不同的结果。

评论中提到的“挤两根柱子”方法快速而简单,并且适用于上面提到的两个例子,例如“stall fru”和“fruity”,但如果你试过的话可能找不到任何东西“水果摊”。这对你来说可能没有问题。

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