Rails sphinx搜索未定义的方法`stringify_keys!'

时间:2013-06-21 18:22:52

标签: ruby-on-rails ruby sphinx thinking-sphinx

我尝试使用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

(另外,我有非标准的db,字段是大写的)

的Gemfile:

gem 'thinking-sphinx'
gem 'mysql2'

为什么我收到此错误?

当我尝试时:

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

我明白了:

Killed

我有sphinx 2.0.4。

2 个答案:

答案 0 :(得分:3)

如果查看堆栈跟踪,您会发现实际上MetaSearch发出错误,而不是ThinkingSphinx。问题是两个gems都会将search方法添加到ActiveRecord::Base,并且您会遇到名称冲突。实际上你调用属于MetaSearch的{​​{1}}方法并且需要完全不同的参数。要摆脱名称冲突,请在Gemfile中的search下添加thinking-sphinx。在此之后,您将能够使用meta_search运行ThinkingSphinx搜索,并使用Article.search运行MetaSearch,而不会出现错误。

答案 1 :(得分:1)

问题是您还使用meta_search gem。看起来它还在您的模型中添加了search方法,该方法被重新定义为thinking_sphinx

的同名方法

解决方案不是使用meta_search,例如。