簡體   English   中英

Rails auto_complete標記搜索過濾器

[英]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中刪除。 有任何想法嗎?

經過一番搜索,我找到了想要的東西。 這篇博客文章對幫助我找到正確的道路非常有幫助。

這就是我得到的:

在控制器中:

@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM