0

thinking_sphinx gem を使用して mysql データベースを検索しようとしています。しかし、私はいくつかの問題を抱えています:

エラーが発生します:

1.9.3-p429 :002 > Article.search "diesel"

**NoMethodError: undefined method `stringify_keys!' for "diesel":String**

    from /home/pavel/.rvm/gems/ruby-1.9.3-p429/gems/meta_search-1.1.3/lib/meta_search/builder.rb:86:in `build'
    from /home/pavel/.rvm/gems/ruby-1.9.3-p429/gems/meta_search-1.1.3/lib/meta_search/searches/active_record.rb:43:in `metasearch'
    from (irb):2
    from /home/pavel/.rvm/gems/ruby-1.9.3-p429/gems/railties-3.2.8/lib/rails/commands/console.rb:47:in `start'
    from /home/pavel/.rvm/gems/ruby-1.9.3-p429/gems/railties-3.2.8/lib/rails/commands/console.rb:8:in `start'
    from /home/pavel/.rvm/gems/ruby-1.9.3-p429/gems/railties-3.2.8/lib/rails/commands.rb:41:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

私は何を間違っていますか?

私のapp/indices/article_index.rb

ThinkingSphinx::Index.define :article, :with => :active_record do
  indexes :ART_ARTICLE_NR
end

(また、非標準のデータベースがあり、フィールドは大文字です)

宝石ファイル:

gem 'thinking-sphinx'
gem 'mysql2'

このエラーが発生するのはなぜですか?

また、私が試したとき:

1.9.3-p429 :003 >  Article.search(ART_ARTICLE_NR: "diesel")

私は得る:

Killed

私はスフィンクス2.0.4を持っています。

4

2 に答える 2

3

スタック トレースを見ると、ThinkingSphinx ではなく、MetaSearch が実際にエラーを出していることがわかります。問題は、両方の gem がsearchメソッドを追加しActiveRecord::Base、名前の競合が発生することです。実際にsearchは、MetaSearch に属し、まったく異なるパラメーターを必要とするメソッドを呼び出します。名前の競合を取り除くには、Gemfileにthinking-sphinx以下を追加します。meta_searchこの後、Article.searchThinkingSphinx 検索Article.metasearchを実行し、MetaSearch 検索をエラーなしで実行できます。

于 2013-06-21T19:30:06.700 に答える