4

我正在将 pg_search 添加到 Rails 应用程序中。我正在按照 github 和此railscast上的说明进行操作,但遇到了问题。

我正在建立一个多模型搜索,并且我有一个基本的实现工作。但我想扩展 pg_seach 以使用它的英语词典。

我已经有一个初始化程序:

PgSearch.multisearch_options = {
  :using => [:tsearch,:trigram],
  :ignoring => :accents
}

所以,从我读过的内容来看,添加字典应该很简单

PgSearch.multisearch_options = {
  :using => [:tsearch => [:dictionary => "english"],:trigram],
  :ignoring => :accents
}

但是当我启动我的服务器时

...config/initializers/pg_search.rb:2: syntax error, unexpected ']', expecting tASSOC (SyntaxError)
  :using => [:tsearch => [:dictionary => "english"],:trigram],

我尝试将方括号换成大括号,以及我能想到的所有其他语法排列,但没有运气。

这里的正确语法是什么?为什么我的尝试无效,因为我遵循了范围搜索的语法?

4

1 回答 1

11

您发布的内容不是有效的 Ruby 语法。

你想要这样的东西:

PgSearch.multisearch_options = {
  :using => {
    :tsearch => {
      :dictionary => "english"
    },
    :trigram => {}
  },
  :ignoring => :accents
}

原因是如果你想拥有键值对,你必须使用哈希。所以本质上,pg_search 允许 2 种语法:

:using => someArray # such as [:tsearch, :trigram]

这意味着“使用 tsearch 和 trigram,两者都带有默认选项”

或者

:using => someHash # such as {:tsearch => optionsHash1, :trigram => optionsHash2}

这意味着“将 tsearch 与 optionsHash1 中的某些选项一起使用,并将 trigram 与 OptionsHash2 中的某些选项一起使用”

让我知道是否有什么可以澄清的。这是非常基本的 Ruby 语法,但我知道 pg_search 接受这两种格式的事实可能会让那些不熟悉的人感到困惑。

于 2012-05-11T00:11:48.720 回答