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
在视图中:
<% form_tag(category_path(), {:method => :get, :class => "form"}) do %> <%= text_field_with_auto_complete :tag, :name, { :name => "tag", :size => 20 }, {:method => :get, :url => category_path(:format => :js) } %> <%=submit_tag "Search All Tags", :name => nil%> <% 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
它的工作原理!