2

我正在整理一个存储库类型的 rails 3 站点。我已经安装了 Thinking Sphinx 并在我的网站上工作,因为我可以输入类似的网址localhost:3000/articles?search=test&page=2,它会返回预期的结果。

我是 Rails 的新手(以及一般的 Web 开发人员);我想我可以管理这方面的模型和控制器方面,但到目前为止的观点让我很难过。我有一个侧边栏我想用作搜索界面。我最接近的是这个(作为侧边栏部分的一部分呈现):

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

搜索方法在我的文章#index 控制器中,当我在浏览器指向该页面(路由为/articles)时对其进行测试时,它按预期工作,但使用了这个奇怪的 url: localhost:3000/articles?utf8=✓&amp;search=test&commit=Search。当浏览器第一次指向根路径时,什么也没有发生。

所以,我认为这些是我需要解决的主要问题:

  1. 编辑 - 已解决(见下文)
  2. 我应该将搜索方法移动到他们自己的控制器,还是应该成为文章控制器的一部分?目前,Article 将是唯一被索引的模型。
  3. 编辑 - 已解决(见下文)
  4. 有没有人有使用 Rails 3 和 Thinking Sphinx 的多面搜索视图的任何好的示例代码?就像我说的,我是一个新手,对视图实现略读的文档感到有些慌乱。但是,只要代码相当完整,我就相当擅长阅读和解释代码。

提前致谢!

解决了:

  1. 如何在尝试搜索之前让“搜索”按钮调用 index 方法?(我已经通过替换解决了这个问题@searcharticles_path

  2. 解决了 using will_paginate,我以前遇到过麻烦,但现在似乎可以工作了。

4

1 回答 1

3

嘿,这是在我切换到 solr 之前我的网站如何工作的摘录

产品有很多类别,我们告诉 sphinx 我们要将它们索引为构面

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

然后在视图中你可以做类似的事情

<% @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 %>
于 2011-03-24T14:16:38.050 回答