PostgreSQL全文搜索:我如何范围呢?

时间:2013-04-25 10:45:30

标签: ruby-on-rails postgresql

大多数情况下,这是基于RailsCasts的截屏视频,#341。

我正在尝试使用PostgreSQL全文搜索,它可以工作,但我需要将其范围化。搜索应该经过object.state=='saved'

的对象

在截屏视频中,搜索方法定义为类方法,所以我不能使用'where'因为'where'返回Array,而搜索方法是class方法,所以这里出错。我试着这样改变它:

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会抛出未定义的方法错误。

我还可以做些什么来搜索我的搜索范围?或者我该如何修复此尝试的错误?

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:2)

where("title @@ :q or text_for_test @@ :q and state @@ :state", q:query, state:'saved')