[英]Rails auto_complete tag search filter
嘗試實現rails auto_complete插件以幫助用戶選擇主頁上未顯示的標簽,因為可能存在數百個標簽,並且只能顯示一小部分。
導航的工作方式是這樣的:我從一個類別顯示頁面開始,該頁面顯示該類別中的所有文章。 用戶單擊標簽時,將在網址中顯示一個標簽過濾器,如下所示:
http://localhost:3000/categories/Stories?tag=scary
這將顯示故事類別中所有帶有標簽“ scary”的文章。
由於“ scary”不是受歡迎的標簽,因此不會顯示在主頁上,但是如果將其放入自動完成文本字段中,則會顯示“ scary”。 我希望Submit標簽呈現與上述相同的網址。
但是我得到一些不同的東西:
http://localhost:3000/categories/ShortStories?tag[name]=scary
不幸的是,此過濾器不會返回任何內容,因為討厭的[name]會潛入其中。
這是自動完成的控制器代碼:
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 %>
:name似乎是必需的,因為auto_complete需要指定列名,但是我想在單擊Submit時將其從URL中刪除。 有任何想法嗎?
Rails 2和自動完成功能將是一個不錯的開始,
經過一番搜索,我找到了想要的東西。 這篇博客文章對幫助我找到正確的道路非常有幫助。
這就是我得到的:
在控制器中:
@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
而且有效!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.