Rails 3跨多个模型自动完成

R. *_*eff 8 autocomplete ruby-on-rails ruby-on-rails-3

所以我在Autailsmplete for Rails 3上找到了一些很棒的信息,它看起来非常简单易用.但我有一个不适合的用例,我需要一些建议.

我想让用户能够通过简单的表单将产品和服务添加到发票中.我希望他们能够输入Item字段并将其从Product.name和Service.name自动完成作为单个集合.

我正在考虑尝试编写覆盖所有三个的父模型,但我仍然认为这不能解决我的问题,因为我无法从我理解的自动完成定义中使用函数.

关于如何尝试实现这一目标的任何建议?即使使用简单的搜索示例,它们似乎仅限于单个模型.

Jos*_*den 4

如果您不反对将 Redis 引入其中,请查看https://github.com/seatgeek/soulmate ——来自自述文件:

Soulmate 是一个帮助解决开发快速自动完成功能的常见问题的工具。它使用 Redis 的排序集来构建部分完成的单词和相应的顶部匹配项的索引,并提供一个简单的 sinatra 应用程序来查询它们。Soulmate 完成你的句子。

Soulmate 的设计简单而快速,并提供以下功能:

  • 在单个查询中为多种类型的项目提供建议(在 SeatGeek,我们自动完成表演者、活动和场地)
  • 结果按用户指定的分数排序
  • 每个项目的任意元数据(在 SeatGeek,我们同时存储 URL 和副标题)

项目是一个简单的 JSON 对象,如下所示:

{
  "id": 3,
  "term": "Citi Field",
  "score": 81,
  "data": {
    "url": "/citi-field-tickets/",
    "subtitle": "Flushing, NY"
  }
}
Run Code Online (Sandbox Code Playgroud)

其中id是唯一标识符(在特定类型内),term是您希望提供补全的短语,score是用户指定的排名指标(Redis 会按字典顺序对具有相同分数的项目进行排序),data是元数据的可选容器您希望在该项目匹配时返回(在 SeatGeek,我们包含该项目的 url 以及当我们在自动完成下拉列表中呈现该项目时的副标题)。

在SeatGeek观看 Soulmate 的实际应用。

如果不出意外,也许它会给您一些关于如何以有意义的方式构建数据的想法。

我没有写任何东西,也没有与灵魂伴侣有任何关系。这只是我在尝试解决类似问题时发现的一个库。希望能帮助到你!