SQLite3 :: SQLException:无法识别的标记:“:”:

时间:2013-08-07 21:29:51

标签: ruby-on-rails sqlite pg-search

我在运行pg_search时遇到问题。我认为它设置正确,但出于某种原因,在尝试运行搜索时,会出现这种情况:

SQLite3::SQLException: unrecognized token: ":": SELECT "courses".*, ((ts_rank((to_tsvector('simple',
coalesce("courses"."title"::text, ''))), (to_tsquery('simple', ''' ' || 'finance' || ' ''')), 0))) AS
pg_search_rank FROM "courses"  WHERE (((to_tsvector('simple', coalesce("courses"."title"::text, '')))
@@ (to_tsquery('simple', ''' ' || 'finance' || ' ''')))) ORDER BY pg_search_rank DESC, "courses"."id" ASC

课程模式:

include PgSearch
scope :by_course_title, lambda { |ttl|
  _by_course_title(ttl) if ttl.present? }
pg_search_scope :_by_course_title, against: :title

搜索控制器:

def index
    @course = Course.by_course_title(params[:fname])
end

在html中:

<% @course.each do |courses| %>
    <div><%= courses %></div>
<% end %>

这可能是由.each引起的吗?如果我只保留&lt;%= @course%&gt;,页面会加载并显示:

#<ActiveRecord::Relation:0x....>

我是否应该在传递.each函数之前转换结果数组?

1 个答案:

答案 0 :(得分:3)

你有一个PostgreSQL特定的库(PgSearch),你使用SQLite3作为你的数据库。选择一个或另一个,但不是两个。

::中的转换运算符coalesce("courses"."title"::text, '')仅对PostgreSQL有效。使用SQLite,您可以完全省略转换(::text部分),但如前所述,除非切换到PostgreSQL数据库,否则您可能无法使PgSearch正常工作。