2013-06-21 3 views
0

나는 내 mysql 데이터베이스에서 thinking_sphinx gem을 사용하여 검색을 시도한다. 하지만 몇 가지 문제를 겪고 :레일 스핑크스 검색 방법이 정의되지 않았습니다. '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 (또한, 내가 아닌 표준 DB 필드가 대문자가있다) : 왜이 ​​오류를 얻고있다

gem 'thinking-sphinx' 
gem 'mysql2' 

?

또한 내가하려고하면

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

내가 얻을 :

Killed 

나는 스핑크스 2.0.4 있습니다.

+0

MetaSearch 보석도 사용하십니까? –

+0

@IlyaKhokhryakov 아니, 그냥 gemfile에있다. – brabertaser19

답변

3

스택 추적을 보면 실제로 MetaSearch에서 ThinkingSphinx가 아니라 오류가 있음을 알 수 있습니다. 문제는 두 보석 모두 메서드를 ActiveRecord::Base에 추가하면 이름 충돌이 발생한다는 것입니다. 실제로MetaSearch에 속하는 메서드를 호출하고 꽤 다른 매개 변수가 필요합니다. 이름 충돌을 제거하려면 thinking-sphinx을 아래에 Gemfile에 추가하십시오. 이 후 ThinkingSphinx 검색을 실행하려면 Article.search을 사용하고 오류없이 MetaSearch 1을 실행하려면 Article.metasearch을 사용할 수 있습니다.

1

문제는 meta_search 보석도 사용하는 것입니다. 그것은 또한 thinking_sphinx

의 방법으로 다시 정의 된 모델에 search 메서드를 추가하는 것처럼 보입니다. 해결책은 예를 들어 meta_search을 사용하지 않아야합니다.