尝试实现rails auto_complete插件,以帮助用户选择主页上没有显示的标签,因为可能会有数百个标签,只能显示一小部分标签。
我的导航工作方式如下:我从一个类别显示页面开始,该页面显示该类别中的所有文章。当用户点击标记时,会在网址中显示标记过滤器,如下所示:
http://localhost:3000/categories/Stories?tag=scary
这将显示故事类别中标记为“scary”的所有文章。
由于“可怕”不是一个流行的标签,它不会显示在主页上,但如果你将它放入自动填充文本字段,“scary”会显示出来。我希望提交标记呈现与上面相同的网址。
但我得到了一些不同的东西:
http://localhost:3000/categories/ShortStories?tag[name]=scary
不幸的是,这个过滤器不会返回任何东西,因为那个讨厌的[名字]潜入那里。
这是我自动完成的控制器代码:
class CategoriesController < ApplicationController
auto_complete_for :tag, :name
视图
<% form_tag category_path, :method => 'get' do %>
<%= text_field_with_auto_complete :tag, :name, { :size => 15 } %>
<%= submit_tag "Search All Tags", :name => nil %>
<% end %>
:名称似乎是必需的,因为auto_complete需要指定一个列名,但是当我点击提交时我想把它从URL中取出来。有什么想法吗?
答案 0 :(得分:2)
答案 1 :(得分:1)
经过一番搜索,我找到了我要找的东西。 This blog post让我走上正确的道路非常有帮助。
所以这就是我得到的:
在控制器中:
@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
在视图中:
<div id="search">
<% 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
它有效!