4

Railsアプリにpg_searchを追加しています。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}

これは、「optionsHash1のいくつかのオプションでtsearchを使用し、OptionsHash2のいくつかのオプションでトリグラムを使用する」ことを意味します。

明確にするために私にできることがあれば教えてください。これはかなり基本的なRuby構文ですが、pg_searchが両方の形式を受け入れるという事実は、あまり馴染みのない人にとっては混乱を招く可能性があることを理解しています。

于 2012-05-11T00:11:48.720 に答える