大多数情况下,这是基于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会抛出未定义的方法错误。
我还可以做些什么来搜索我的搜索范围?或者我该如何修复此尝试的错误?
答案 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')