0

我正在关注 Ryan Bates 截屏视频并构建一个基本搜索,但我决定需要比纯 MySQL 文本搜索更好的东西,并希望 Sol Sunspot gem 可以工作。

根据截屏视频http://media.railscasts.com/videos/037_simple_search_form.mov,我已经在我的模型中设置了搜索。

我的控制器有一个简单的

定义索引
  @tasks = Task.search(params)
结尾

我的模型有

def self.search(参数)
   如果参数 [:搜索]
      搜索做
           关键字参数[:搜索]
           分页 :page=>params[:page], :per_page =>20
      结尾
   别的
     select('id,title,desc').paginate(:page=>params[:page], :per_page =>20)
   结尾
结尾

当我在没有搜索的情况下加载页面时,我得到了正确的输出。

当我提供搜索词时,我得到

参数数量错误(0 代表 1)

我已经尝试过“search do”和“Task.search do”,因为这似乎是我看过的教程之间的区别http://tech.favoritemedium.com/2010/01/full-text- search-in-rails-with-sunspot.html,以及我这样做的方式,从控制器传递到方法中。

有关如何进行此操作的任何建议?

4

2 回答 2

1

正如workergnome 所提到的,该错误的确切原因是您已经定义了一个search方法,您试图从其内部调用该方法,而没有预期的参数。

您需要调用的是solr_search方法,它是 Sunspot 定义的实际方法(如此命名是为了让您提供自己的自定义search方法)。

此外,该solr_search方法返回的对象是一个 Search 对象,其中包含有关搜索本身的一些元信息。您可能希望该对象上的方法返回实例化的 ActiveRecordresults对象。

将它们放在一起,这就是您希望您的search方法最终看起来的样子:

def self.search(params)
  if params[:search]
    solr_search do
      keywords params[:search]
      paginate :page => params[:page], :per_page => 20
    end.results
  else
    select('id,title,desc').paginate(:page => params[:page], :per_page => 20)
  end
end
于 2011-02-24T18:32:37.740 回答
0

你得到了“错误数量的参数”,因为你已经将 self.search 定义为模型上的一个函数,然后你试图引用 Sunspot 搜索方法。

您是否尝试过跳过使用 Rails 适配器,直接使用 Sunspot 语法?

Sunspot.search(self) do
  keywords params[:search]
  paginate :page=>params[:page], :per_page =>20
end

可能会解决你的问题。

于 2011-02-23T06:17:37.007 回答