2011-03-09 85 views
2

我正在放置一个存储库式的rails 3网站。 我有思想狮身人面像安装和工作在我的网站,因为我可以进入像localhost:3000/articles?search=test&page=2的网址,它会返回预期的结果。思考狮身人面像分面搜索实现示例?

我是新来的Rails(和web dev一般);我想我可以管理这个模型和控制器方面,但迄今为止的观点让我难以置信。我有一个我想用作搜索界面的边栏。我来最接近的是这样的(呈现为一个侧边栏部分的一部分):

<% form_tag @search, :method => :get do %> 
    <%= text_field_tag :search, params[:search] %> 
    <%= submit_tag "Search"%> 
<% end %> 

的搜索方法是在我的文章#指数控制器,当我测试它在浏览器指向该页面(路由作为/articles),它按预期工作,但有这个奇怪的网址:localhost:3000/articles?utf8=✓&search=test&commit=Search。当浏览器首先指向根路径时,什么都不会发生。

所以,我觉得这些都是我需要解决的主要问题:

  1. 编辑 - 解决(见下文)
  2. 我应该移动搜索方法,以自己的控制器,或者他们应该是部分的物品管制员?目前,文章将是唯一被索引的模型。
  3. 编辑 - 解决(见下文)
  4. 有没有人有任何使用Rails 3和Thinking Sphinx的分面搜索视图的示例代码?就像我说的那样,我是一个初学者,并且被视图实现所掠夺的文档有点惊慌。但是,只要它相当完整,我就很善于阅读和解释代码。

在此先感谢!

解决:

  1. 如何让“搜索”按钮,试图寻找之前调用索引方法? (我通过用articles_path代替@search解决了这个问题)。

  2. 使用will_paginate解决,我之前遇到过麻烦,但现在似乎正在工作。

回答

3

嘿, 这是我的网站是如何运作的提取物之前,我切换到Solr

产品有很多种类,我们告诉我们想要索引他们的面斯芬克斯

class Product < ActiveRecord::Base {  
    has_many :categorisations, :dependent => :destroy 
    has_many :categories, :through => :categorisations   

define_index do 
    indexes product_name, 
    indexes description 
    indexes categories(:name), :as => :category,:facet => true  
end 
} 

结果控制器

class ResultsController < ApplicationController 
    def index 
     @facets = Product.facets params[:qt], :conditions => {:category => params[:category}},:page => params[:page], :per_page => 20 
     @products = @facets.for 
    end 
end 

然后在视图中你可以做一些hing like

<% @facets.each do |facet, facet_options| %> 
    <span><%= facet %></span> 
    <ul> 
    <% facet_options.each do |option, count| %> 
    <li><%= link_to "#{option} (#{count})", 
     :params => {facet => option, :page => 1} %></li> 
    <% end %> 
    </ul> 
<% end %>