如何开始没有结果,摆脱“空白”搜索太阳黑子的所有结果?

时间:2011-11-12 20:32:08

标签: ruby-on-rails ruby ruby-on-rails-3 sunspot

将Sunspot用作搜索引擎时,我遇到了两个问题。

第一个问题是我有一个链接到search/index,当它这样做时显示我数据库中的所有产品,这是我不想要的全部。我该怎么做才能显示没有结果,用户必须使用搜索字段?

第二个问题是当用户输入空白搜索" "时,它会返回数据库中应该返回"No Search Results Found"的所有产品。如何才能做到这一点?

class SearchController < ApplicationController
  def index
    @search = Product.search do
        fulltext params[:search]    
    end
    @products = @search.results
  end
end

resources :search, :only => [:index]

class Product < ActiveRecord::Base
  attr_accessible :name

  # Sunspot config
  searchable do
    text :name
  end
end

<%= form_tag search_path, :method => :get do %>
  <p>
    <%= text_field_tag :search, params[:search] %>
    <%= submit_tag "Search", :name => nil %>
<% end %>

1 个答案:

答案 0 :(得分:2)

你可以通过1次修复解决这两个问题。

# /app/controllers/search_controller.rb
class SearchController < ApplicationController
  def index
    @products = []

    # If the search param with it's whitespace stripped off
    # actually has something left then search for it
    unless params[:search].nil? || params[:search].strip.empty?
        @search = Product.search do
            fulltext params[:search]    
        end
        @products = @search.results
    end

    @products
  end
end

# /app/views/search/index.haml
- if @products.empty? 
    Your search did not return any results.
- else
    # display the results or do whatever you want to do when something is actually found

基本上我建议你通过将@products设置为空数组来启动SearchController #index。如果传入搜索参数,我们检查它的剥离结果(删除了空白区域)并查看是否还有其他内容。

如果用户搜索了一堆空格,那么strip会将其减少为空,搜索将无法运行。

如果搜索参数的剥离版本确实存在某些内容(也可能是有效的搜索文本),则执行搜索并将@products设置为结果集。

最后,返回@products

在您的视图中,您可以检查@products数组以查看它是否为空。如果它是空的,则用户搜索空格(伪造)或者他们的搜索没有返回任何内容......所以你可以根据它采取适当的行动。