2

这主要基于 RailsCasts 截屏视频,#341。

我正在尝试使用 PostgreSQL 全文搜索,它可以工作,但我需要确定它的范围。搜索应该通过对象 where object.state=='saved'

在截屏视频中搜索的方法被定义为类方法,所以我不能使用'where',因为'where'返回数组,而搜索方法是类方法,所以这里出错。我试图以这种方式改变它:

def test_search(query)
 if query.present?
  self.where("title @@ :q or text_for_test @@ :q", q:query)
 else
  scoped
 end
 end

至:

@tests=Test.where(:state=>'saved')
@tests.test_search(params[:query])

但是 Rails 会抛出未定义的方法错误。

我还能做些什么来确定搜索范围?或者如何解决此尝试的错误?

4

2 回答 2

2
where("title @@ :q or text_for_test @@ :q and state @@ :state", q:query, state:'saved')
于 2013-04-25T11:15:38.320 回答
2

使用为 postgres 提供全文搜索的textacular gem。

您可以使用 textacular 提供的“basic_search”函数,类似于使用命名范围的方式。

Test.basic_search('Sonic').where(:status => 'saved')

Test.where(:status => 'saved').basic_search('Sonic')
于 2013-04-25T10:59:23.307 回答