[英]Rails - Postgresql - Full text search - Railscasts 343
我正在关注PostgreSQL中的Railscasts#343全文搜索,并且在开始时我遇到了问题。
我在我的模型中替换了这一行:
where("name ilike :q or content ilike :q", q: "%#{query}%")
通过
where("name @@ :q or content @@ :q", q: query)
但是,它仍然没有像在轨道广播中那样执行搜索。 如果在名称中我有“FOO”,并且在内容“BAR”中,并且如果我搜索“FOO BAR”,则结果为空。 (与旧代码和“ilike”功能一样)
SQL请求看起来像这样:
* FROM "posts" where (name @@ 'foo bar' or content @@ 'foo bar')
我在Windows 7 x64上使用PostgreSQL 9.2.2,Rails 3.2.6和Ruby 1.9.3p125。
谢谢你提前。
编辑
我的宝石文件:
source 'https://rubygems.org'
gem 'rails', '3.2.6'
gem 'pg'
gem "ransack"
group :assets do
gem 'sass-rails', '~> 3.2.3'
gem 'coffee-rails', '~> 3.2.1'
gem 'uglifier', '>= 1.0.3'
end
gem 'jquery-rails'
我删除了所有注释行。
PS:为了清楚,在我添加“ransack”之前,我遇到了同样的问题。
在Ryan的例子中,文章必须让超人和角色在结果中返回。 它不是我认为你希望它的方式。 那是全文搜索的地方(在剧集的后面)
我几乎完全遵循了railscast代码*。
这段代码
class Article < ActiveRecord::Base
attr_accessible :content, :title
def self.text_search(query)
if query.present?
where("title @@ :q or content @@ :q", q: query)
else
scoped
end
end
end
生成此SQL
SELECT "articles".* FROM "articles" WHERE (title @@ 'because' or content @@ 'because')
它可以工作并返回在标题或内容中包含“因为”的文章
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.