SolrがバックエンドのRailsで利用できる全文検索ライブラリSunspotだがActiveAdminを使う時は注意。
何かというとActiveAdminにはMetasearchという全文検索ライブラリに依存していて一緒にインストールされるが
拡張の仕方が結構似てて下手すると競合するって話。
ASCIICastとかでもModel.searchを推奨しているようにそのように使うことが多いと思う。
(わざわざModel.solr_searchを使う人いないよなあ)
ActiveAdminで使われているMetasearchもModel.searchというメソッドを実装して拡張してる。
SunspotはModel.searchというメソッドを定義するときに既に定義されていない場合aliasを貼るので
Metasearchと共存しているときはModel.searchはMetasearchの提供するメソッドになる。
こんな
sunspot_rails-1.3.3/lib/sunspot/rails/searchable.rb
117 def self.extended(base) #:nodoc: 118 class <<base 119 alias_method :search, :solr_search unless method_defined? :search 120 alias_method :search_ids, :solr_search_ids unless method_defined? :search_ids 121 alias_method :remove_all_from_index, :solr_remove_all_from_index unless method_defined? :remove_all_from_index 122 alias_method :remove_all_from_index!, :solr_remove_all_from_index! unless method_defined? :remove_all_from_index! 123 alias_method :reindex, :solr_reindex unless method_defined? :reindex 124 alias_method :index, :solr_index unless method_defined? :index 125 alias_method :index_orphans, :solr_index_orphans unless method_defined? :index_orphans 126 alias_method :clean_index_orphans, :solr_clean_index_orphans unless method_defined? :clean_index_orphans 127 end 128 end
Model.searchでSunspotの動作を期待してると動かなくなるところがあるよ!
共存させる時の解決方法はgithubのissueでも話されていたけど解決方法はシンプル
SunspotはModel.solr_searchというメソッドを定義しているのでSunspotを使いたいところではそっちを使おう。