2013-06-21 1 views
0

Я пытаюсь выполнить поиск в моей базе данных mysql с помощью think_sphinx gem. Но у меня возникли некоторые проблемы:Rails sphinx search undefined method `stringify_keys! '

Я получаю ошибку:

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 

(также, я не стандартный дб, поле в верхнем регистре)

Gemfile:

gem 'thinking-sphinx' 
gem 'mysql2' 

Почему я получаю эту ошибку?

Кроме того, когда я пытаюсь:

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

я получаю:

Killed 

У меня есть сфинкса 2.0.4.

+0

Вы используете также камень MetaSearch? –

+0

@ ИльяХохряков Нет, просто имейте это в gemfile – brabertaser19

ответ

3

Если вы посмотрите на трассировку стека, вы увидите, что на самом деле MetaSearch дает ошибку, а не ThinkingSphinx. Проблема в том, что оба драгоценных камня добавляют search метод к ActiveRecord::Base, и вы получаете конфликт имен. На самом деле вы вызываете метод search, принадлежащий MetaSearch, и требует совсем других параметров. Чтобы избавиться от конфликта имен, добавьте thinking-sphinx ниже meta_search в Gemfile. После этого вы сможете использовать Article.search для запуска поиска ThinkingSphinx и Article.metasearch для запуска MetaSearch без ошибок.

1

Проблема в том, что вы также используете драгоценный камень meta_search. Похоже, он также добавляет метод search в ваших моделях, который переопределяется в одинаковом названии методом thinking_sphinx

Решение не должно использовать, например, meta_search.