Rails auto_complete标记搜索filter

尝试实现rails auto_complete插件以帮助用户选择主页上没有出现的标签,因为可能会有数百个标签,并且只能显示一小部分标签。

我的导航工作方式是这样的:我从一个类别显示页面开始,显示该类别中的所有文章。 当用户点击标记时,会在url中显示标记filter,如下所示:

http://localhost:3000/categories/Stories?tag=scary 

这将显示故事类别中标记为“可怕”的所有文章。

由于“可怕”不是一个流行的标签,它不会出现在主页上,但如果你把它放入自动填充文本字段,“scary”就会显示出来。 我希望提交标记呈现与上面相同的URL。

但我得到的东西有点不同:

 http://localhost:3000/categories/ShortStories?tag[name]=scary 

不幸的是,这个filter不会返回任何东西,因为那个讨厌的[名字]潜入那里。

这是我自动完成的控制器代码:

  class CategoriesController < ApplicationController auto_complete_for :tag, :name 

和观点

  'get' do %>  15 } %>  nil %>  

:name似乎是必需的,因为auto_complete需要指定一个列名,但是当我点击提交时我想把它从url中删除。 有任何想法吗?

Rails 2和Autocomplete将是一个良好的开端

Railscasts – 自动完成关联

经过一番搜索,我找到了我要找的东西。 这篇博文非常有助于我走上正确的道路。

所以这就是我得到的:

在控制器中:

 @search_tags = Tag.find_by_keyword(params[:tag]) respond_to do |format| format.html format.js do render :inline => "<%= auto_complete_result(@search_tags, 'name') %>" end end 

在视图中:

  

最后,我在vendor / plugins / acts_as_taggable_on_steroids / lib中为tag.rb模型添加了一个方法

  def self.find_by_keyword(keyword) if keyword.present? keyword = "%#{keyword}%" @search_tags = Tag.all :conditions => ["name like ?", keyword], :order => "name asc", :limit => 10 else @search_tags = Tag.all :limit => 10, :order => "name asc" end end 

它的工作原理!