我尝试使用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(另外,我有非标准数据库,字段为大写)
gemfile:
gem 'thinking-sphinx'
gem 'mysql2'为什么我会得到这个错误?
同样,当我尝试的时候:
1.9.3-p429 :003 > Article.search(ART_ARTICLE_NR: "diesel")我得到了:
Killed我有sphinx 2.0.4。
发布于 2013-06-22 03:30:07
如果你查看堆栈跟踪,你会发现实际上是MetaSearch给出了一个错误,而不是ThinkingSphinx。问题是两个get都将search方法添加到ActiveRecord::Base中,您会得到一个名称冲突。实际上,您调用的search方法属于MetaSearch,并且需要完全不同的参数。要消除名称冲突,请在Gemfile中的meta_search下添加thinking-sphinx。之后,您就可以使用Article.search运行ThinkingSphinx search,使用Article.metasearch运行MetaSearch one而不会出现错误。
发布于 2013-06-22 04:01:44
问题是您也使用meta_search gem。看起来它还在您的模型中添加了search方法,该方法被重新定义为thinking_sphinx的同名方法
例如,解决方案不是使用meta_search。
https://stackoverflow.com/questions/17241910
复制相似问题